【问题标题】:Parsing All Pages of HTML using BeautifulSoup使用 BeautifulSoup 解析 HTML 的所有页面
【发布时间】:2019-07-24 18:36:29
【问题描述】:

我在我的代码中遇到问题,该问题与一页完美配合,但是当我尝试解析所有 28 页时,它不会解析 27 页,而是只解析第一个。

主要思想是从提到的 url 中解析数据,总共有 28 个页面,我为它制作了 for 循环,以便从所有页面中进行 BS 解析。但是,它只解析第一页,而不解析其他页面。

我想听听您的建议和使其发挥作用的方法。

代码:

from bs4 import BeautifulSoup as bs
import requests
import pandas as pd

for t in range(28):
    url = "https://boss.az/vacancies?action=index&controller=vacancies&only_path=true&page={}&type=vacancies".format(t)
    r = requests.get(url)
    soup = bs(r.content, 'html.parser')

    titles = [i.text for i in soup.select('.results-i-title')]
    #print(titles)
    companies = [i.text for i in soup.select('.results-i-company')]
    #print(companies)
    summaries = [i.text for i in soup.select('.results-i-summary')]

df = pd.DataFrame(list(zip(titles, companies, summaries)), columns = ['Title', 'Company', 'Summary'])
df.to_csv(r'Data.csv', sep=',', encoding='utf-8-sig',index = False )

【问题讨论】:

  • 不是 100% 清楚您要做什么,但您不应该扩展 titlescompaniessummaries 而不是重新分配它们吗?
  • 主要思想是从提到的 url 中解析数据,总共有 28 页,我为它制作了 for 循环,以便从所有页面中进行 BS 解析。但是,它只解析第一页,而不解析其他页面。
  • 对,所以大概,您想连接从每个bs() 调用中提取的结果。但是你没有组合结果,你正在重置它们。事实上,您应该只看到最后一个页面的结果,而不是第一个页面。
  • 谢谢你,弗兰克的评论,我真的很感激。之前没注意,多亏了你和@Code Different,我的问题已经解决了,可以解析网站上的数据了。

标签: python pandas parsing beautifulsoup


【解决方案1】:

循环的每次迭代都会覆盖titlescompaniessummaries。只需将titles = ... 更改为titles += ...

from bs4 import BeautifulSoup as bs
import requests
import pandas as pd

titles = []
companies = []
summaries = []

for t in range(28):
    url = "https://boss.az/vacancies?action=index&controller=vacancies&only_path=true&page={}&type=vacancies".format(t)
    r = requests.get(url)
    soup = bs(r.content, 'html.parser')

    titles += [i.text for i in soup.select('.results-i-title')]
    companies += [i.text for i in soup.select('.results-i-company')]
    summaries += [i.text for i in soup.select('.results-i-summary')]

df = pd.DataFrame(list(zip(titles, companies, summaries)), columns = ['Title', 'Company', 'Summary'])
df.to_csv(r'Data.csv', sep=',', encoding='utf-8-sig',index = False )

【讨论】:

  • 不错的方法 +
  • 我想知道我怎么会忘记在变量中添加 +。它现在完美运行。 +1 并接受您的答案为正确答案。祝你有个美好的一天。也许这对其他人也有好处。祝你好运。
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2012-08-19
  • 1970-01-01
  • 2012-12-13
  • 2010-12-03
相关资源
最近更新 更多