我正在开发一些抓取代码,它不断返回一些错误,我想其他人可能可以帮助解决这些错误。在
我先运行这个片段:
import pandas as pd
from urllib.parse import urljoin
import requests
base = "http://www.reed.co.uk/jobs"
url = "http://www.reed.co.uk/jobs?datecreatedoffset=Today&pagesize=100"
r = requests.get(url).content
soup = BShtml(r, "html.parser")
df = pd.DataFrame(columns=["links"], data=[urljoin(base, a["href"]) for a in soup.select("div.pages a.page")])
df
我在今天的招聘启事的第一页写了这段话。我提取页面底部的url,以便找到在这个时间点上存在的页面总数。下面的正则表达式为我解释了这一点:
^{pr2}$不是在上面的第三行,页数总是包含在这个列表中倒数第二个(共五个)url中。我相信有一种更优雅的方式来做这件事,但它已经足够了。然后我将从URL中获取的数字输入循环:
result_set = []
loopbasepref = 'http://www.reed.co.uk/jobs?cached=True&pageno='
loopbasesuf = '&datecreatedoffset=Today&pagesize=100'
for pnum in range(1,pagenum):
url = loopbasepref + str(pnum) + loopbasesuf
r = requests.get(url).content
soup = BShtml(r, "html.parser")
df2 = pd.DataFrame(columns=["links"], data=[urljoin(base, a["href"]) for a in soup.select("div", class_="results col-xs-12 col-md-10")])
result_set.append(df2)
print(df2)
这就是我出错的地方。我要做的是循环遍历从第1页开始到第N页(其中N=pagenum)列出作业的所有页面,然后提取链接到每个单独作业页面的URL并将其存储在一个dataframe中。我尝试过soup.select("div", class_="")
的各种组合,但是每次都会收到一个错误,错误是:TypeError: select() got an unexpected keyword argument 'class_'
。在
如果有人对此有任何想法,并能看到一个好的前进道路,我将感谢帮助!在
干杯
克里斯
您可以一直循环,直到没有下一页:
只需循环生成器函数,即可从每个页面获取URL:
^{pr2}$我还在选择器中使用
a[href^=/jobs]
,因为有其他匹配的标记,所以我们确保只提取作业路径。在在您自己的代码中,使用选择器的正确方法是:
您的语法用于find或find\u all,其中您将
class_=...
用于css类:但无论如何,这都不是正确的选择。在
如果您不确定为什么要创建多个dfs:
这会给你一个dfs列表:
但是如果您只想要一个,那么使用带有itertools.chain的原始代码:
这将为您提供一个df中的所有链接:
相关问题 更多 >
编程相关推荐