【发布时间】:2020-06-19 15:39:51
【问题描述】:
我的 BeautifulSoup 刮刀还有一个问题,希望您能帮助我。自从为其添加了从详情页中提取信息的代码后,现在抓取工具只抓取第一页,不再抓取列出的多个页面。
我认为它与循环有关,但我不确定如何定义它以确保它不会引起问题。
有没有更好的分页方式?
我已经发布了完整的代码,并将导致问题的新部分加粗。
完整代码:
from bs4 import BeautifulSoup
import scrapy
import requests
import csv
import time
import os
pages = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
with open(r'csv', 'a', encoding='utf-8', newline='') as f_output:
csv_print = csv.writer(f_output)
file_is_empty = os.stat(r'C:\csv').st_size == 0
if file_is_empty:
csv_print.writerow(['Title', 'Company', 'Location', 'Salary', 'Summary', 'Link', 'Description', 'URL'])
for page in pages:
source = requests.get('https://www.indeed.com/jobs?q=work+from+home&l=United+States&fromage=1&start={}'.format(page)).text
soup = BeautifulSoup(source, 'lxml')
results = soup.findAll("div", {"class": "result"})
for jobs in soup.find_all(class_='result'):
try:
title = jobs.h2.text.strip()
except Exception as e:
title = None
print('Title:', title)
try:
company = jobs.span.text.strip()
except Exception as e:
company = None
print('Company:', company)
try:
location = jobs.find('span', class_='location').text.strip()
except Exception as e:
location = None
print('Location:', location)
try:
salary = jobs.find('span', class_='no-wrap').text.strip()
except Exception as e:
salary = None
print('Salary:', salary)
try:
summary = soup.find('div', class_='summary').text.strip()
except Exception as e:
summary = None
print('Summary:', summary)
link = jobs.a['href']
if 'http' not in link:
link = ("https://www.indeed.com" + link)
print('Link:', link)
**page = requests.get(link)
soup = BeautifulSoup(page.content, 'html.parser')
job_description = soup.find('div', id='jobDescriptionText').decode_contents(formatter="html")
print('job_description:', job_description)
try:
url = soup.find('div', class_='icl-u-lg-hide').attrs['href']
except Exception as e:
url = None
print('url:', url)**
csv_print.writerow((title, company, location, salary, summary, link, job_description, url))
print('--------')
time.sleep(0.5)
非常感谢你:) 你们是最棒的!
【问题讨论】: