我是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))
答案 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))
我刚评论了这一行,因为你必须决定在这些情况下该做什么。