在Python web scraper中显示所有搜索结果

问题描述 投票:0回答:1

我是Python的新手,我正在构建一个web scraper,它将抓取以下页面和链接: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))
python web-scraping
1个回答
0
投票

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

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

我遇到的另一个问题是,当某些链接(如ValueError)似乎没有“提供”和/或“寻求”时,这条线路正在筹集YLaw Group

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

我刚刚评论了这条线,因为你必须决定在这些情况下做什么。

© www.soinside.com 2019 - 2024. All rights reserved.