【问题标题】:How to handle Empty List- multiple page web scraping如何处理空列表-多页网页抓取
【发布时间】:2019-01-04 01:01:28
【问题描述】:

我正在尝试通过网络抓取从 Lazada 中提取问答部分,但是当某些页面没有任何问题/答案时,我遇到了问题。当我为多个网页运行代码时,我的代码什么也不返回,但仅适用于有问题和答案的一个页面。

如何让代码在第一页没有问题的情况下继续阅读其余网页?

我尝试在我的代码中添加 if else 语句,如下所示。

 import bleach
 import csv
 import datetime
 from bs4 import BeautifulSoup

urls = ['url1','url2','url3']

for url in urls:
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")

 now = datetime.datetime.now()
 print ("Date data being pulled:")
 print str(now)
 print ("")

 nameList = soup.findAll("div", {"class":"qna-content"})

for name in nameList:
    if nameList == None:
       print('None')
    else:
       print(name.get_text())
       continue

我的预期输出将如下所示:

无 --> 来自 url1 的输出 无 --> 来自 url2 的输出
可以选择榛子吗? 尊敬的客户您好,最新的到期日期为 2019 年,我们将确保到期日期仍然超过 6 个月。--> 来自 url3 的输出

感谢您的帮助,在此先感谢!

【问题讨论】:

  • 您收到错误消息了吗?
  • nameList 永远不会是 None 因为findAll 总是返回一个列表 - 如果它什么也没找到,则返回一个空列表。此外,在迭代时检查 nameList 是否为 None 是没有意义的。此外,您的代码似乎没有正确缩进;它只从最后一个 URL 中选择项目。
  • @ewwink 我没有收到任何错误消息,它什么也没返回。
  • @t.m.adam 是的,你是对的,我已经通过阅读进行了一些更改,以便更好地理解并设法修复它。

标签: python web-scraping beautifulsoup


【解决方案1】:

你有错误的语法,把if nameList == None:放在循环之外,你还需要修复缩进。

urls = ['url1','url2','url3']

for url in urls:
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")

    now = datetime.datetime.now()
    print ("Date data being pulled:")
    print str(now)
    print ("")

    nameList = soup.findAll("div", {"class":"qna-content"})
    if nameList == None:
        print(url, 'None')
        continue # skip this URL

    for name in nameList:
        print(name.get_text())

【讨论】:

  • 不客气,如果解决了,请将答案标记为正确。
【解决方案2】:

我对代码的逻辑进行了一些更改并设法打印了现在的记录,因为我还在学习中,如果您有替代/更好的解决方案,希望也可以分享给其他人。

import datetime
from bs4 import BeautifulSoup
import requests

urls = ['url1','url2','url3']

for url in urls:
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")

now = datetime.datetime.now()
print ("Date data being pulled:")
print str(now)
print ("")

qna = []
qna = soup.findAll("div", class_= "qna-content")

for qnaqna in qna:
     if not qnaqna:
        print('List is empty')
     else:
        print(qnaqna.get_text())
        continue

【讨论】:

  • 它只会处理url3的内容,请参阅我的修复答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 2021-12-11
  • 2022-01-15
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多