Python爬取Reed.co.uk职位无返回结果且无报错,如何排查解决?
Reed.co.uk 爬虫无返回数据修复方案
核心问题原因
- requests请求参数错误:
requests.get()第二个位置参数为查询参数params,直接传入headers会导致请求头不生效,需要显式指定关键字参数headers=headers - 类名匹配错误:定位职位列表的article类名写为
'job-result '携带多余尾部空格,实际页面类名无多余空格,导致无法匹配到任何节点 - 元素未提取文本:直接存储了BeautifulSoup的标签对象,没有提取纯文本内容,最终输出的csv会包含冗余标签代码
- 翻页逻辑失效:循环遍历页码时,没有将页码参数拼入请求URL,所有请求都返回第一页内容
修复后可运行代码
import requests from bs4 import BeautifulSoup import pandas as pd # 拉取指定页码的页面内容 def extract(page): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'} # 拼接页码参数 url = f'https://www.reed.co.uk/jobs/warehouse-operative-jobs-in-portsmouth?pageno={page}' # 显式指定headers参数 r = requests.get(url, headers=headers) soup = BeautifulSoup(r.content, 'html.parser') return soup # 解析职位信息存入列表 def transform(soup): # 去掉类名多余空格 divs = soup.find_all('article', class_ = 'job-result') for item in divs: # 提取纯文本,加异常处理避免字段缺失报错 try: title = item.find('h3', class_ = 'title').text.strip() except: title = '' try: company = item.find('div', class_ = 'posted-by').text.strip() except: company = '' try: salary = item.find('div', class_ = 'metadata').text.strip() except: salary = '' try: summary = item.find('div', class_ = 'description').text.strip() except: summary = '' job = { 'Title' : title, 'Company' : company, 'Salary' : salary, 'Summary' : summary } joblist.append(job) return joblist = [] # 遍历1-4页内容 for i in range(1,5): print(f'正在拉取第{i}页数据') c = extract(i) transform(c) df = pd.DataFrame(joblist) df.to_csv('jobs.csv', encoding='utf_8_sig') # 指定编码避免Windows端打开csv乱码
内容的提问来源于stack exchange,提问作者Red_bull
相关产品推荐
相关产品推荐

