检查我在每个页面中有多少个链接并将计数放在数据框列中

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)