【问题标题】:Web Scraping missing values网页抓取缺失值
【发布时间】:2020-11-01 23:09:04
【问题描述】:

我有这个简单的抓取代码。

现在的问题是,这适用于具有相同内容的其他页面,而有些则不能。这是为什么呢?

我这里有一张图片。带下划线的位置是我要抓取的位置,另一个是 html 代码。现在请注意,此抓取过程适用于具有相同 HTML 代码的相同内容,与图像中看到的相同,但是!在某些页面中它不起作用!当我试图打印出该跨度应该属于的 html 代码块时,我想通了,但是当我在 sublime 中使用 find 功能时,我没有找到它。所以这意味着代码块丢失了,但在某些页面中它确实有效!

我希望我清楚我想说的话。这是源代码。看看它并尝试它,然后你就会明白我在说什么。

from bs4 import BeautifulSoup
import requests

url2 = "https://www.ebay.com.au/itm/Auth-Bell-Ross-Black-PVD-Mens-Wrist-Watch-46MM-BR01-92-S-Box-Docs/383600988865?hash=item59506692c1:g:-0wAAOSw1BBeVzyE"
url = "https://www.ebay.com.au/itm/Bell-Ross-BR03-94-Ceramic-Desert-Type-Chronograph-Automatic-Watch/174344419661?hash=item2897bcb94d:g:7M4AAOSwb~Ve7y0M"
rawdata = requests.get(url2)
soup = BeautifulSoup(rawdata.content,"html.parser")#try xml parser


product_block = soup.find("div",{"id":"CenterPanelInternal"})

#print(product_block)

product_name = product_block.find("h1",class_="it-ttl").text
product_condition = product_block.find("div",class_="condText").text
product_price = product_block.find("span",class_="notranslate").text
product_seller = product_block.find("div",class_="bdg-90").text.replace("\n",'')
product_loc = product_block.find("div",class_="iti-eu-bld-gry")#.text.replace("\n",'')
product_postTo = product_block.find("div",class_="vi-shp-pdg-rt")#.text.replace("\n",'')
product_img = product_block.find("img",class_="img").get("src")

print(product_name)
print(product_condition)
print(product_price)
print(product_seller)
print(product_loc)
print(product_postTo)
print(product_img)

运行代码后,结果如下。它是 None 因为该代码块不存在。

现在将 url 更改为 url2 后,其中 url2 包含相同的 CONTENT!再次相同的内容,但不同的页面和数据,但来自 html 代码的类和 id 是相同的。然后我得到这个结果。

说实话,这太奇怪了。请帮助我:(我遗漏了一些东西?有什么我不明白的吗?请告诉我。您可以在代码中复制链接btw :) 非常感谢!谢谢!

【问题讨论】:

    标签: python html web-scraping beautifulsoup screen-scraping


    【解决方案1】:

    将解析器更改为html5lib:

    import requests
    from bs4 import BeautifulSoup
    
    
    url2 = "https://www.ebay.com.au/itm/Bell-Ross-BR03-94-Ceramic-Desert-Type-Chronograph-Automatic-Watch/174344419661?hash=item2897bcb94d:g:7M4AAOSwb~Ve7y0M"
    
    rawdata = requests.get(url2)
    soup = BeautifulSoup(rawdata.content, "html5lib")  # <--- change to "html5lib" here
    
    
    product_block = soup.find("div",{"id":"CenterPanelInternal"})
    
    #print(product_block)
    
    product_name = product_block.find("h1",class_="it-ttl").text
    product_condition = product_block.find("div",class_="condText").text
    product_price = product_block.find("span",class_="notranslate").text
    product_seller = product_block.find("div",class_="bdg-90").text.replace("\n",'')
    product_loc = product_block.find("div",class_="iti-eu-bld-gry")#.text.replace("\n",'')
    product_postTo = product_block.find("div",class_="vi-shp-pdg-rt")#.text.replace("\n",'')
    product_img = product_block.find("img",class_="img").get("src")
    
    print(product_name)
    print(product_condition)
    print(product_price)
    print(product_seller)
    print('-' * 80)
    print(product_loc)
    print('-' * 80)
    print(product_postTo)
    print('-' * 80)
    print(product_img)
    

    打印:

    ...
    
    --------------------------------------------------------------------------------
    <div class="iti-eu-bld-gry">
                <span itemprop="availableAtOrFrom">Melbourne, Victoria, Australia</span>
            </div>
    --------------------------------------------------------------------------------
    <div class="iti-eu-bld-gry vi-shp-pdg-rt" id="vi-acc-shpsToLbl-cnt">
                <span itemprop="areaServed">
                Worldwide</span>
            </div>
    --------------------------------------------------------------------------------
    
    ...
    

    【讨论】:

    • 哇!谢谢!我去检查一下。我可以问一下解析器吗?这是为什么?它对其他人有什么影响?谢谢安德烈 :)
    • @Gels_YT 对于这些类型的问题,首先要做的是运行bs4.diagnose (crummy.com/software/BeautifulSoup/bs4/doc/#diagnose) 并安装lxml 和html5lib。
    • bs4.FeatureNotFound:找不到具有您要求的功能的树生成器:html5lib。您需要安装解析器库吗?我收到此错误 :( 我需要 pip install 吗?
    • @Gels_YT 是的,安装html5lib pypi.org/project/html5lib
    • 好的,我现在试试,谢谢!
    猜你喜欢
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2018-01-06
    • 1970-01-01
    相关资源
    最近更新 更多