双“11”一天的临近,它既是购物者的狂欢,也是卖家的狂欢。囤积已久的购物车在那天将被清空,鼓鼓的钱包将会被掏空。我不知道你们是否已经装满了购物车,反正我的购物车已经满满的啦!!!又是一年剁手季。
双十一满满的都是套路,小编我年年中招,快递慢得要死,价格贵得要死,最后穷得要死,反正是生不如死。
今年,小编不甘心再中招,突然有了新想法,在节前爬取了自己想要商品的价格,等到双11的时候,我再爬一次,看你是真涨了,还是降低了(纯属玩笑,估计那天网络特卡,别增加服务器压力,搞崩溃犯法了不好,只供学习,不然后果自负)。
废话不多说了,现在来看看干货:
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re
from pyquery import PyQuery as pq
browser=webdriver.Firefox()
wait=WebDriverWait(browser,10)
def search():
browser.get('http://www.dangdang.com/')
try:
input=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#key_S')))
submit=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#form_search_new > input.button')))
input.clear()
input.send_keys('R语言')
submit.click()
total=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#go_sort > div > div.data > span:nth-child(3)')))
get_product()
return total.text
except TimeoutException:
print('链接超时')
return search()
def next_page(page_number):
try:
input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#t__cp")))
submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#click_get_page")))
input.clear()
input.send_keys(page_number)
submit.click()
browser.implicitly_wait(20)
wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, ".current"),str(page_number)))
get_product()
except TimeoutException:
next_page(page_number)
def get_product():
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#search_nature_rg .bigimg')))
html = browser.page_source
doc = pq(html)
items = doc('#search_nature_rg .bigimg').items()
for item in items:
product = {
'name':item.find('p.name').text(),
'detail':item.find('p.detail').text(),
'new_price':item.find('p.price span.search_now_price').text(),
'old_price':item.find('p.price span.search_pre_price').text(),
'discount':item.find('p.price span.search_discount').text(),
'shop':item.find('p.dang').text(),
'commit':item.find('p.search_star_line a.search_comment_num').text(),
'author':item.find('p.search_book_author').text(),
'img':item.find('a.pic').attr('src'),
'lianjie':item.find('a.pic').attr('href')
}
print(product)
def main():
try:
total=int(search()[1:])
print(total)
for i in range(2,total+1):
next_page(i)
except Exception:
print("*****出现异常******")
finally:
browser.close()
if __name__ == '__main__':
main()
以上代码亲测,可以直接运行,前提是你得配置好selenium和火狐浏览器。
除此之外,还爬取了京东、淘宝、天猫等购物网站,具体代码可以留言获取,这里就不展示了。