私はいくつかのスクレイピングコードを開発しており、他の人が助けてくれると思われるいくつかのエラーを返しています。soup.select()のdivクラスの組み合わせを修正してください
まず私はこのスニペットを実行します。
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を抽出します。以下の正規表現は私のためにこれを取る:
df['partone'] = df['links'].str.extract('([a-z][a-z][a-z][a-z][a-z][a-z]=[0-9][0-9].)', expand=True)
df['maxlink'] = df['partone'].str.extract('([0-9][0-9][0-9])', expand=True)
pagenum = df['maxlink'][4]
pagenum = pd.to_numeric(pagenum, errors='ignore')
わけではありません上記の3行目に、ページ数は、常にこのリスト内のURL(5のうちの)最後から2番目の中に含まれています。これを行うもっとエレガントな方法があると確信していますが、それだけで十分です。 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に移動して各ページにリンクするURLを抽出し、それをデータフレームに格納するすべてのページをループすることです。私はsoup.select("div", class_="")
のさまざまな組み合わせを試みましたが、読み取るたびにエラーが表示されます:TypeError: select() got an unexpected keyword argument 'class_'
。
誰もがこれについての考えを持っていて、良い方法を見ることができるなら、私は助けに感謝します!
乾杯
何の次のページが存在しなくなるまであなただけのループ保つことができクリス
BShtmlはどこですか? – codervince
ごめんなさい!私はbeautifulsoup4もインポートしましたが、間違って私が行った行は含まれていませんでした。 'import pandas as pd'の前に' bs4 importからBShtmlとしてBeautifulSoup'を書いた –
なぜ複数のデータフレームを作成していますか? –