beyond1994 发表于 2022-7-20 23:04

selenium爬取某当书网24小时畅销书籍排名及价格

本帖最后由 beyond1994 于 2022-7-20 23:06 编辑

大佬勿喷,记录一次使用selenium爬取自己想要的信息,里面的def函数不熟练和代码会有些乱,在这抛砖引玉望各位大佬指出更好的解决方法{:1_906:}
from selenium import webdriver
from pyquery import PyQuery as pq
from selenium.webdriver import ChromeOptions
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

TOTAL_PAGE = 24
TIME_OUT = 24
IDNEX_URL = 'http://bang.dangdang.com/books/bestsellers/1-{page}'
import csv
f = open('book.csv',mode='a',encoding='utf-8',newline='')
#表头
csv_writer = csv.DictWriter(f,fieldnames=[
    '书名',
    '评论',
    '作者',
    '出版时间',
    '价格',
    '原价',
    '电子书价格',
    '书连接'

])
csv_writer.writeheader() #写入表头

def index_page(page):
    url = IDNEX_URL.format(page=page) #完善url
    return url

def scrape_page(url):
    option = ChromeOptions()
    option.add_argument('--headless')
    browser = webdriver.Chrome(options=option)
    browser.get(url)
    WebDriverWait(browser,TIME_OUT).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.bang_list')))
    html = browser.page_source
    doc = pq(html)
    ul = doc('.clearfix li').items()
    for i in ul:
      name = i('.name a').attr('title')
      comment = i('.star a').text() #评论
      author = i('.publisher_info a').attr('title') #作者和出版社
      time = i('.publisher_info span').text() #出版时间
      price = i('.price p:first-child .price_n').text() #原价
      discount = i('.price p:first-child .price_r').text()
      ebook = i('.price p:nth-child(2) .price_n').text()
      detailrul = i('.name a').attr('href')
      dict = {
            '书名':name,
            '评论':comment,
            '作者':author,
            '出版时间':time,
            '价格':price,
            '原价':discount,
            '电子书价格':ebook,
            '书连接':detailrul
      }
      csv_writer.writerow(dict)

def main():
    for page in range(1, TOTAL_PAGE + 1):
      urlindex = index_page(page)
      test = scrape_page(urlindex)
      print(test)

if __name__ == '__main__':
    main()

beyond1994 发表于 2022-7-21 17:45

jifeng2008 发表于 2022-7-21 11:16
因为浏览器渲染速度问题,你可以考虑多开浏览器,异步执行提高速度,根据你现在的同步模式估计爬取完这些数 ...

对的,在获取数据时发现了 感谢指出问题!

beyond1994 发表于 2022-7-21 17:47

jzjbyq 发表于 2022-7-21 09:28
最近也想学习一下selenium,就是不知道这个是否可以后台运行,想要在如青龙面板中运行脚本

这个不晓得哦···

beyond1994 发表于 2022-7-20 23:04

这是效果图

SuperZDK 发表于 2022-7-20 23:25

俺也刚学,插个眼

礼拜衣 发表于 2022-7-20 23:29

好东西,感谢分享

tys88 发表于 2022-7-21 07:37

支持原创,厉害

XiaoZouYu 发表于 2022-7-21 08:03

厉害,借鉴了

milu1123 发表于 2022-7-21 08:21

大大,你这个有什么教材吗??能推荐推荐吗?

airdear 发表于 2022-7-21 08:46

多多学习代码,才能多多开发好东西!谢谢你的分享~~~

jzjbyq 发表于 2022-7-21 09:28

最近也想学习一下selenium,就是不知道这个是否可以后台运行,想要在如青龙面板中运行脚本

sssguo 发表于 2022-7-21 10:30

感谢分享!
页: [1] 2 3
查看完整版本: selenium爬取某当书网24小时畅销书籍排名及价格