1. ホーム
  2. web-scraping

[解決済み] Craiglistsの投稿から電子メールを抽出する

2022-02-17 11:40:32

質問

を使用せずに、craigslist のリスティングから電子メールを検索する方法はありますか? selenium

import requests,re
from bs4 import BeautifulSoup as bs
url='https://newyork.craigslist.org/wch/prk/d/hawthorne-10x15-drive-up-storage-unit/7122801839.html' #example url
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
res=requests.get(url,headers=headers)

は、リクエストが行われるたびにメールが変化する(と思われる)ので、試しに x=re.findall('(\w{32})',res.text) しかし、それはうまくいきません

どうすればいいですか?

Craigslist は、この特別な URL に POST リクエストを送信することによって、メールアドレスを取得します。

https://newyork.craigslist.org/contactinfo/nyc/prk/U_ID

の値は、この U_ID7122801839 を、この場合(ご提示いただいたURLより)。

このリクエストを再現すると、次のようになります。

from bs4 import BeautifulSoup
import requests
import json

U_ID = "7122801839"

URL = f"https://newyork.craigslist.org/contactinfo/nyc/prk/{U_ID}"

COOKIE_VALUE = "cookie" # Replace this with a valid cookie
HEADERS = { 
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'Accept':'*/*',
'Accept-Language':'en-us',
'Accept-Encoding':'gzip, deflate, br',
'Host':'newyork.craigslist.org',
'Origin':'https',
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Safari/605.1.15',
'Connection':'keep-alive',
'Referer':'https',
'Content-Length':'44816',
'Cookie':COOKIE_VALUE,
'X-Requested-With':'XMLHttpRequest',
 }


PAYLOAD = {
'MIME Type':'application/x-www-form-urlencoded; charset=UTF-8',
}


response = requests.request(
    method='POST',
    url=URL,
    headers=HEADERS,
    data=PAYLOAD
    )

html = json.loads(response.text)['replyContent']

soup = BeautifulSoup(html,'html.parser')

email = soup.find(class_='mailapp').get('href')
email = email.split('?subject')[0].replace('mailto:','')

print(email)

このコードはクッキーがないと動作しないので、ブラウザからクッキーをコピーする必要があることに注意してください。