检查我在每个页面中有多少个链接并将计数放在数据框列中
Check how many links I have in each page and put the count at a dataframe column
我正在做这个项目来收集一系列网页有多少链接。
我的想法是在 Pandas 数据框的一列中添加每个页面的链接数。 ideia 是这样的:
title count links
0 page1 2
1 page2 3
2 page3 0
我做了这个代码:
links_bs4 = ['page1', 'page2']
article_title = []
links = []
for item in links_bs4:
page = requests.get(item)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.find('title')
article_title.append(title.string)
body_text = soup.find('div', class_='article-body')
for link in body_text.find_all('a'):
links.append((link.get('href')))
count_of_links = len(links)
s1 = pd.Series(article_title, name='title')
s2 = pd.Series(count_of_links, name='count links')
df = pd.concat([s1, s2], axis=1)
部分有效。 count_of_links = len(links)
生成所有页面的所有链接的总和。
我希望每个页面的计数,而不是现在发生的总数。我怎样才能做到这一点?我的 for 循环正在为整个列表添加计数。我应该为我抓取的每个 URL 创建一个新列表?或者在 Python?
中使用其他东西
我显然遗漏了部分逻辑。
您可以像对待 article_title
一样对待 count_of_links
。以下是基于您的代码,但有我的更改。
links_bs4 = ['page1', 'page2']
article_title = []
count_of_links = [] # <------ added
links = []
for item in links_bs4:
page = requests.get(item)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.find('title')
article_title.append(title.string)
body_text = soup.find('div', class_='article-body')
count = 0 # <------- added
for link in body_text.find_all('a'):
links.append((link.get('href')))
# count_of_links = len(links) # <------- commented out
count += 1 # <------- added
count_of_links.append(count) # <------- added
s1 = pd.Series(article_title, name='title')
s2 = pd.Series(count_of_links, name='count links')
df = pd.concat([s1, s2], axis=1)
或者你也可以这样编码,那么你就不需要为一个新的列创建一个变量,而只需要扩展字典。
links_bs4 = ['page1', 'page2']
data = []
links = []
for item in links_bs4:
page = requests.get(item)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.find('title')
body_text = soup.find('div', class_='article-body')
link_temp = [link.get('href') for link in body_text.find_all('a')]
data.append({'title': title.string, 'count links': len(link_temp)})
links.extend(link_temp)
df = pd.DataFrame(data)
我正在做这个项目来收集一系列网页有多少链接。
我的想法是在 Pandas 数据框的一列中添加每个页面的链接数。 ideia 是这样的:
title count links
0 page1 2
1 page2 3
2 page3 0
我做了这个代码:
links_bs4 = ['page1', 'page2']
article_title = []
links = []
for item in links_bs4:
page = requests.get(item)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.find('title')
article_title.append(title.string)
body_text = soup.find('div', class_='article-body')
for link in body_text.find_all('a'):
links.append((link.get('href')))
count_of_links = len(links)
s1 = pd.Series(article_title, name='title')
s2 = pd.Series(count_of_links, name='count links')
df = pd.concat([s1, s2], axis=1)
部分有效。 count_of_links = len(links)
生成所有页面的所有链接的总和。
我希望每个页面的计数,而不是现在发生的总数。我怎样才能做到这一点?我的 for 循环正在为整个列表添加计数。我应该为我抓取的每个 URL 创建一个新列表?或者在 Python?
中使用其他东西我显然遗漏了部分逻辑。
您可以像对待 article_title
一样对待 count_of_links
。以下是基于您的代码,但有我的更改。
links_bs4 = ['page1', 'page2']
article_title = []
count_of_links = [] # <------ added
links = []
for item in links_bs4:
page = requests.get(item)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.find('title')
article_title.append(title.string)
body_text = soup.find('div', class_='article-body')
count = 0 # <------- added
for link in body_text.find_all('a'):
links.append((link.get('href')))
# count_of_links = len(links) # <------- commented out
count += 1 # <------- added
count_of_links.append(count) # <------- added
s1 = pd.Series(article_title, name='title')
s2 = pd.Series(count_of_links, name='count links')
df = pd.concat([s1, s2], axis=1)
或者你也可以这样编码,那么你就不需要为一个新的列创建一个变量,而只需要扩展字典。
links_bs4 = ['page1', 'page2']
data = []
links = []
for item in links_bs4:
page = requests.get(item)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.find('title')
body_text = soup.find('div', class_='article-body')
link_temp = [link.get('href') for link in body_text.find_all('a')]
data.append({'title': title.string, 'count links': len(link_temp)})
links.extend(link_temp)
df = pd.DataFrame(data)