【问题标题】:Stuck with this web scraper被这个网络刮刀卡住了
【发布时间】:2015-09-18 07:00:30
【问题描述】:

我正在尝试使用 BeautifulSoup 在 Python 2.7 中构建一个程序,该程序将从该页面和后续页面中提取所有配置文件 URL

http://www.reaa.govt.nz/Pages/PublicRegisterSearch.aspx?pageNo=1&name=a*&orgName=&location=&licenceNo=&itemsPerPage=100&sortExpression=2

我已经和这个程序斗争了很长时间,但它仍然不起作用。我想我在 CSS 选择器上搞砸了,但我不确定还能尝试什么。

请指教...我是编程和 python 新手

import requests
from bs4 import BeautifulSoup

def re_crawler(pages):
    page = 1
    while page <= pages:
        url = 'http://www.reaa.govt.nz/Pages/PublicRegisterSearch.aspx?pageNo=' + str(page) + '&name=a*&orgName=&location=&licenceNo=&itemsPerPage=100&sortExpression=2'
        code = requests.get(url)
        text = code.text
        soup = BeautifulSoup(text)
        for link in soup.select('tr.alternate td a[id*=ct100_]'):
            href = link.get('href')
            print (href)
        page += 1

re_crawler(2)

【问题讨论】:

  • 我在 html 中看到 id 以 ctl00_ 开头,但在您的代码中是 ct100_,可能是拼写错误?
  • 非常感谢您注意到这一点,Birei。我没有注意到它是 ctl00_ 并且它也不起作用。感谢您的帮助:)

标签: python-2.7 css-selectors web-scraping beautifulsoup


【解决方案1】:

改用这个?

from urllib import urlopen
from bs4 import BeautifulSoup

def re_crawler(pages):
    page = 1
    while page <= pages:
        url = 'http://www.reaa.govt.nz/Pages/PublicRegisterSearch.aspx?pageNo=' + str(page) + '&name=a*&orgName=&location=&licenceNo=&itemsPerPage=100&sortExpression=2'
        code = urlopen(url)
        soup = BeautifulSoup(code)
        for link in soup.select('tr.alternate td a[id*=ctl00_]'):
            href = link.get('href')
            print (href)
        page += 1

re_crawler(2)

【讨论】:

  • 这就像一个魅力!非常感谢鲁本。您能否解释一下为什么它不适用于请求,但它适用于 urlopen?作为一名学习者,我很想知道 :) 再次感谢,非常感谢!
  • 其实 birei 做对了。我所做的只是稍微简化您的代码。如果你修复了 ctl00 位,请求也会起作用。
  • 我试过那个鲁本。不适用于我的代码(请求)。它对你有用吗?
  • 是的,确实如此。只是慢了一点。
  • 我也有。您可以尝试在 requests.get() 行之前和之后打印一些东西,看看是否是问题
猜你喜欢
  • 2018-03-21
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多