【发布时间】:2022-06-28 23:34:35
【问题描述】:
我正在使用 Python 进行一些网络抓取,以在确实职位发布的职位描述中找到某些关键字。
但是我只能浏览 2 页。如果我将页数增加到 3(变量 nopa),则会出现错误:'NoneType' object has no attribute 'find'。 如果有人知道为什么会这样,那将非常有帮助。
这是我的代码:
import re
from bs4 import BeautifulSoup
import requests
import matplotlib.pyplot as plt
import pandas as pd
keywordlist = []
keywords = ["PYTHON", "JAVA", "SQL", "NOSQL", "MONGODB", "CASSANDRA",
"AWS", "AZURE", "SPARK", "AIRFLOW", "HIVE", "HADOOP", "REDSHIFT",
"S3", "KAFKA", "TABLEAU", "EXCEL", "QLIK", "POWER BI",
"DYNAMODB", "WAREHOUS", "ALTERYX", "LAKE", "ETL", "CI/CD", "BASH",
"SHELL"]
occurences = []
tags = []
nopa = 2
for i in range(nopa):
url = "https://de.indeed.com/jobs?q=data%" + str(nopa*10) + "engineer&l&vjk=144c9cb8990a7fc2"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
outer_most_point=soup.find('div',attrs={'id': 'mosaic-provider-jobcards'})
for job in outer_most_point.find('ul'):
point = job.find("a")
if point is not None:
tags.append(point["href"])
for i in range(len(tags)):
url_href='https://de.indeed.com' + tags[i]
response = requests.get(url_href)
soup2 = BeautifulSoup(response.text, 'html.parser')
for i in soup2.find('div',{'class':'jobsearch-jobDescriptionText'}):
keywordsublist = []
for keyword in keywords:
if keyword in str(i).upper():
keywordsublist.append(keyword)
keywordsublist = list(set(keywordsublist))
keywordlist = keywordlist + keywordsublist
for keyword in keywords:
if keyword in keywordlist:
occurences.insert(keywords.index(keyword),keywordlist.count(keyword))
else: occurences.insert(keywords.index(keyword),0)
df = pd.DataFrame( list(zip(keywords, occurences)), columns =['Technology', 'num'])
df = df[df.num != 0]
df = df.sort_values('num')
plt.bar('Technology', 'num', data=df, color='blue')
plt.show()
【问题讨论】:
-
你能告诉我们
response在第三页的样子吗? -
这是什么 -
"https://de.indeed.com/jobs?q=data%" + str(nopa*10) + "engineer&l&vjk=144c9cb8990a7fc2"?你重新找到“数据工程师”,链接中的空格 -%20。所以对于第一页 -https://de.indeed.com/jobs?q=Data%20Engineer&start=0,第二页 -https://de.indeed.com/jobs?q=Data%20Engineer&start=10,第三页 -https://de.indeed.com/jobs?q=Data%20Engineer&start=20,等等 -
响应代码始终为 200(正常)。使用 Sergeys 解决方案,它现在可以工作了。我认为 20 表示第二页有 10 个列表,30 表示第三页,依此类推。非常感谢您的两个回答。
标签: python web-scraping beautifulsoup request