【问题标题】:My Beautiful Soup scraper is not working as intended我美丽的汤刮刀没有按预期工作
【发布时间】:2018-10-13 02:55:33
【问题描述】:

我正在尝试从以下网页中提取成分列表:

https://skinsalvationsf.com/2012/08/updated-comedogenic-ingredients-list/

所以我要提取的第一个成分是乙酰化羊毛脂,最后一个成分是棕榈酸辛酯。

查看此 URL 的页面源,我了解到成分列表的模式如下所示:

<td valign="top" width="33%">Acetylated Lanolin <sup>5</sup></td>

所以我写了一些代码来拉出列表,它给了我零结果。下面是代码。

import requests
r = requests.get('https://skinsalvationsf.com/2012/08/updated-comedogenic-ingredients-list/')
from bs4 import BeautifulSoup
soup = BeautifulSoup(r.text, 'html.parser')

results = soup.find_all('td', attrs={'valign':'top'})

当我尝试len(results) 时,它给了我一个零。

我做错了什么?为什么我无法按预期提取列表?我是网络爬虫的初学者。

【问题讨论】:

    标签: python parsing web-scraping beautifulsoup scraper


    【解决方案1】:

    您的网页抓取代码正在按预期工作。但是,您的请求没有奏效。如果您检查您的请求的状态码,您可以看到您获得了 403 状态。

    r = requests.get('https://skinsalvationsf.com/2012/08/updated-comedogenic-ingredients-list/')
    print(r.status_code) # 403
    

    发生的情况是服务器不允许非浏览器请求。要使其工作,您需要在发出请求时使用标头。这个标头应该与浏览器发送的类似:

    headers = {
        'User-Agent': ('Mozilla/5.0 (Windows NT 6.1; WOW64) '
                       'AppleWebKit/537.36 (KHTML, like Gecko) '
                       'Chrome/56.0.2924.76 Safari/537.36')
    }
    
    r = requests.get('https://skinsalvationsf.com/2012/08/updated-comedogenic-ingredients-list/', headers=headers)
    
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(r.text, 'html.parser')
    results = soup.find_all('td', attrs={'valign':'top'})
    print(len(results))
    

    【讨论】:

      【解决方案2】:

      你的汤请求被禁止了。

      因此您无法抓取它。似乎网站正在阻止抓取。

      print(soup)
      
      <html>
      <head><title>403 Forbidden</title></head>
      <body bgcolor="white">
      <center><h1>403 Forbidden</h1></center>
      <hr/><center>nginx</center>
      </body>
      </html>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-15
        • 2021-03-02
        • 2020-12-13
        • 2019-03-13
        • 2014-05-28
        • 2020-09-28
        相关资源
        最近更新 更多