在 Python 网页抓取工具中显示所有搜索结果



我对Python很陌生,正在构建一个网络抓取器,它将抓取以下页面和其中的链接:https://www.nalpcanada.com/Page.cfm?PageID=33

问题是页面的默认设置是显示前 10 个搜索结果,但是,我想抓取所有 150 个搜索结果(选择"全部"时,有 150 个链接(。

我尝试弄乱 URL,但无论选择什么显示结果选项,URL 都保持静态。我还尝试查看Chrome上开发人员工具的"网络"部分,但似乎无法弄清楚使用什么来显示所有结果。

这是我到目前为止的代码:

import bs4
import requests
import csv
import re
response = requests.get('https://www.nalpcanada.com/Page.cfm?PageID=33')
soup = bs4.BeautifulSoup(response.content, "html.parser")
urls = []
for a in soup.findAll('a', href=True, class_="employerProfileLink", text="Vancouver, British Columbia"):
    urls.append(a['href'])
pagesToCrawl = ['https://www.nalpcanada.com/' + url + '&QuestionTabID=47' for url in urls]
for pages in pagesToCrawl:
    html = requests.get(pages)
    soupObjs = bs4.BeautifulSoup(html.content, "html.parser")
    nameOfFirm = soupObjs.find('div', class_="ip-left").find('h2').next_element
    tbody = soupObjs.find('div', {"id":"collapse8"}).find('tbody')
    offers = tbody.find('td').next_sibling.next_sibling.next_element
    seeking = tbody.find('tr').next_sibling.next_sibling.find('td').next_sibling.next_sibling.next_element
    print('Firm name:', nameOfFirm)
    print('Offers:', offers)
    print('Seeking:', seeking)
    print('Hireback Rate:', int(offers) / int(seeking))

用这段代码替换你的response调用似乎有效。原因是您没有正确传递cookie。

response = requests.get(
    'https://www.nalpcanada.com/Page.cfm',
    params={'PageID': 33},
    cookies={'DISPLAYNUM': '100000000'}
)

我遇到的唯一另一个问题是,当某些链接(如YLaw Group(似乎没有"报价"和/或"寻求"时,这条线提出了ValueError

print('Hireback Rate:', int(offers) / int(seeking))

我只是注释掉了这条线,因为您必须决定在这些情况下该怎么做。

最新更新