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

时间:2018-03-01 22:25:41

标签: python web-scraping

我是Python的新手,正在构建一个网络抓取工具,它将抓取以下页面及其中的链接:https://www.nalpcanada.com/Page.cfm?PageID=33

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

我尝试过搞乱网址,但无论选择何种显示结果选项,网址都会保持不变。我还尝试查看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))

1 个答案:

答案 0 :(得分: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))

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