<実現したいこと>
クラウドソーシングサイト『ランサーズ』の検索ボックスに『スクレイピング』と検索し、そのページにある各案件のタイトルURLを取得したいです。
<問題点>
リンクの取得ができたのですが、タイトルURL下部の7桁の番号が異なっています。『スクレイピング』と検索したページのタイトルURLではなく、トップページのタイトルURLの取得になってしまいます。
<ソースコード>
Python
1import requests 2from bs4 import BeautifulSoup 3 4#スクレイピングと検索したリンク先 5url = 'https://www.lancers.jp/work/search?keyword=%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0?page={}' 6 7target_url = url.format(1) 8r = requests.get(target_url) 9soup = BeautifulSoup(r.text) 10contents = soup.find_all('div',class_='c-media__content') 11for content in contents: 12 title_url = content.find('a', class_='c-media__title') 13 title_url2 = title_url.get('href') 14 15# 『href』 が 『/work/detail/(7桁の番号)』 だけの記載なため、以下に変換 16 title_url3 = title_url2.replace('/w', 'https://www.lancers.jp/w') 17 print(title_url3)
<補足>
クラウドソーシングサイト『ランサーズ』の利用規約にスクレイピングの禁止事項が見当たらなかったため、スクレイピングをしていますが、間違っていましたらご指摘頂けると幸いです。
url = 'https://www.lancers.jp/work/search?keyword=%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0?page={}'
ここの末尾の部分 ?page={} は &page={} ではないでしょうか。
?page={} から &page={} に変更したのですが、1ページ以外にも2,3,5ページなどからも取得してきたり、スクレイピングとは関係ないURL(記事執筆や動画編集など)まで取得してしまいます。
ウェブブラウザの Developpers Tools で確認すると、ソート順を指定するキーワード(sort)があります。なので、
url = 'https://www.lancers.jp/work/search?keyword=%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0&show_description=1&sort=client&page={}'
とするとよいかもしれません。(sort=client は「おすすめ順」で、新着順は sort=started になります)
以下の手順でやってみたのですが、取得したURLが変わっただけでしたが、それをきっかけに解決することができました。
『スクレイピング』で検索したとき、並び順が『新着』と表示されていたのですが、『残り時間が少ない順』に切り替え、再度『新着』に切り替えたところURLが下記のように変更されました。このURLを用いた結果、上手く取得することができました。
melianさんが仰った 『sort』 に関しても併せて理解することができたため非常に助かりました。
ご丁寧に教えて頂き、ありがとうございます。
https://www.lancers.jp/work/search?keyword=%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0&show_description=0&sort=started&work_rank%5B%5D=0&work_rank%5B%5D=1&work_rank%5B%5D=2&work_rank%5B%5D=3
回答1件
あなたの回答
tips
プレビュー