检查我在每个页面中有多少链接.然后将该计数放在数据帧列中



我做这个项目是为了收集一系列网页的链接数量。

我的想法是在Pandas数据帧的一列中添加每个页面的链接数。理想是有这样的东西:

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)

它在一定程度上起作用。CCD_ 1生成组合的所有页面的所有链接的计数。

我希望是每页的计数,而不是现在的总数。我该怎么做?我的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)

相关内容

最新更新