メルカリのスクレイピングをしてみた【コードはほぼコピペ】
ちょっと色々と試してみたい事がありメルカリのスクレイピングをBeautifulSoup
を使ってやってみました。
seleniumを利用する方法も考えましたがやはりブラウザを開いて色々とするのは時間の無駄なのでBeautifulSoupを利用しています。
完全に今回はこちらの方のソースのコピペです。
xn--u9j207iixgbigp2p.xn--tckwe
import requests, bs4, re def mercari(search_word, how_many_page): pagelist = [] for i in range(1, how_many_page): page = 'https://www.mercari.com/jp/search/?page={0}&keyword={1}'.format(str(i), search_word) pagelist.append(page) with open('product.csv', 'w', newline='', encoding='utf-16') as f: f.write('name,price,elem' + "\n") for page in pagelist: headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'} res = requests.get(page, headers=headers) res.raise_for_status() soup = bs4.BeautifulSoup(res.text) elems_name = soup.select('.items-box-name') elems_price = soup.select('.items-box-price') elems_photo = soup.select('.items-box-photo') for i in range(len(elems_name)): new_elems_name = elems_name[i].text.replace(",", "") new_elems_price = elems_price[i].text.replace(",", "").replace("¥ ", "") new_elems_photo = re.search('figcaption', str(elems_photo[i].__str__)) if new_elems_photo: f.write(new_elems_name + "," + new_elems_price + "," + new_elems_photo.group(0) + "\n") else: f.write(new_elems_name + "," + new_elems_price + "," + "" + "\n") try: search_word = input("search_word?: ") how_many_page = input("how_many_page?: ") how_many_page = int(how_many_page) mercari(search_word, how_many_page) except: print("how_many_page -> you input key not int")
ただし一部CSVの文字化け対策で文字コードを変更しています。
しかし、以下の記事で書いているように結局エクセルで開くと文字がセルに分割されなかったりと結構問題が残っています。
nade-nadegata.hatenablog.jp
ぜひ皆さんも参考にしてみてください。