我是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))
用这段代码替换你的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))
我刚刚评论了这条线,因为你必须决定在这些情况下做什么。