前言
今天爲大家帶來利用Python模擬登錄京東商品數據抓取,廢話不多說。
Let's start happily
開發工具
**Python版本: ** 3.6.4
相關模塊:
selenium模塊
time模塊
requests模塊
lxml模塊
csv模塊
環境搭建
安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。
思路分析
本文以爬蟲抓取京東商品,講解如何爬取模擬登錄京東抓取數據
1.獲取頁面信息
class JdSpider(object):
def __init__(self):
self.i = 0
self.url = "https://www.jd.com"
self.browser = webdriver.Chrome(r"C:/python-3.9.6-embed-amd64/Application/chromedriver.exe")
2.獲取頁面信息 --到具體商品頁面
def get_html(self):
# self.browser.set_window_size(1200, 800) # 控制瀏覽器大小
# self.browser.back() # 瀏覽器後退
# self.browser.forward() # 瀏覽器前進
self.browser.get(self.url)
self.browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",
{
"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})
a = input('請輸入你想要的商品:')
self.browser.find_element_by_xpath('//*[@id="key"]').send_keys(a)
3.解析頁面
# 解析頁面
def parse_html(self):
# 把下拉菜單拉到底部,執行JS腳本
self.browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(2)
# 提取所有商品節點對象列表 li列表
li_list = self.browser.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li')
結果展示
4.創建csv,寫入header
# 創建csv
fp = open('京東商品信息爬取.csv', 'wt', newline='', encoding='utf-8')
# 寫入header
writer = csv.writer(fp)
writer.writerow(('價格', '評價', '出版社', '商品信息',))
for li in li_list:
info_list = li.text.split('\n')
if info_list[0].startswith('每滿') or info_list[1].startswith('¥'):
price = info_list[1]
name = info_list[2]
comment = info_list[3]
shop = info_list[4]
elif info_list[0].startswith('單件'):
price = info_list[3]
name = info_list[4]
comment = info_list[5]
shop = info_list[6]
else:
price = info_list[0]
name = info_list[1]
comment = info_list[2]
shop = info_list[3]
writer.writerow((price, comment, shop, name))
print(price, comment, shop, name)