欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

selenium+PhantomJS爬取豆瓣讀書

 更新時間:2019年08月26日 17:18:57   作者:douyaoxin  
這篇文章主要為大家詳細介紹了selenium+PhantomJS爬取豆瓣讀書,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了selenium+PhantomJS爬取豆瓣讀書的具體代碼,供大家參考,具體內容如下

獲取關于Python的全部書籍信息;
通過代碼測試 request攜帶‘User-Agent'及 ‘data'數據信息的方式均無法獲取到相關信息,獲取數據時,部分數據為空,導致獲取過程中報錯,無法獲取全部數據,初步判定豆瓣讀書的反爬機制較為嚴格;通過selenium 模擬瀏覽器請求的方法測試后發(fā)現,可利用 selenium 方法請求獲取數據;

#導入需要的模塊
from selenium import webdriver
import time
from lxml import etree
import pymysql
import re

#創(chuàng)建一個函數
def my_browers(url, page):

  # 獲取瀏覽器對象
  browers = webdriver.PhantomJS(executable_path=r'd:\Desktop\pythonjs\phantomjs-2.1.1-windows\bin\phantomjs.exe')
  
  # 用瀏覽器發(fā)起請求
  browers.get(url)
  
  #休息兩秒,頻率低一點,爬的時間久一點,安全就多一點
  time.sleep(2)
  
   # 獲取頁面信息
  html = browers.page_source
  
  # 調用頁面解析函數
  parse_html(html)
  
# 解析頁面信息
def parse_html(html):

  # 生成一個xpath對象
  html = etree.HTML(html)

  # 獲取所有的書籍信息列表
  books = html.xpath('//div[contains(@class,"sc-bZQynM")]')

  # 遍歷每一本書籍 然后拿到我們想要的數據
  for book in books:
    # 創(chuàng)建一個存書字典存數據用
    book_dict = {}

    # 獲取封面信息
    pic = book.xpath('//img/@src')
    if pic:
      book_dict['pic'] = pic[0]
    else:
      book_dict['pic'] = ''
    # print(pic)

    # 獲取書名
    book_name = book.xpath('//div[@class="title"]/a/text()')
    # print(book_name)
    if book_name:
      book_name = book_name[0]
      # 刪除書名中最后出現的引號,
      #由于存數據庫的時候書名最后面的引號會導致數據庫報錯,刪除可以使代碼更健壯
      if '"' in book_name:
        pattern = re.compile(r'"')
        book_name = pattern.sub('', book_name)
      if "'" in book_name:
        pattern = re.compile(r"'")
        book_name = pattern.sub('', book_name)
        # 刪除書名中最后出現的\,存數據的時候書名最后的\會把sql語句最后的引號轉義,
        #刪除可以使代碼更健壯
      if '\\' in book_name:
        book_name = book_name[:-1]
      book_dict['book_name'] = book_name
    else:
      book_dict['book_name'] = ''

    # 獲取書籍詳情連接
    book_url = book.xpath('//div[@class="title"]/a/@href')
    if book_url:
      book_dict['book_url'] = book_url[0]
    else:
      book_dict['book_url'] = ''

    # 獲取評分信息
    score_book = book.xpath('//span[@class="rating_nums"]/text()')
    if score_book:
      book_dict['score_book'] = score_book[0]
    else:
      book_dict['score_book'] = ''

    # 獲取出版社信息
    book_detail = book.xpath('//div[@class="meta abstract"]/text()')
    if book_detail:
      # 刪除書詳情中最后出現的引號;
      book_detail = book_detail[0]
      if "'" in book_detail:
        pattern = re.compile(r"'")
        book_detail = pattern.sub('', book_detail)

      book_dict['book_detail'] = book_detail
    else:
      book_dict['book_detail'] = ''
    print(book_dict)

    # 調用數據庫函數
    insert_mysql(book_dict)

# 插入數據庫
def insert_mysql(book_dict):
  # 連接數據庫
  conn = pymysql.connect('localhost', 'root', 'root', 'test', charset='utf8')

  # 創(chuàng)建操作數據庫的對象
  cursor = conn.cursor()

  pic = book_dict['pic']
  book_name = book_dict['book_name']
  book_url = book_dict['book_url']
  score = book_dict['score_book']
  book_detail = book_dict['book_detail']

  sql = f"insert into python_book (pic,book_name,book_url,score,book_detail) " \
     f"VALUE ('{pic}','{book_name}','{book_url}','{score}','{book_detail}')"

  # 執(zhí)行并提交
  cursor.execute(sql)
  conn.commit()


if __name__ == '__main__':
  for i in range(0, 199):
    print('=================下載第{}頁========================'.format(i + 1))
    page = i * 15
    base_url = 'https://book.douban.com/subject_search?search_text=python&cat=1001&start={}'.format(page)
    my_browers(base_url, page)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python+Django實現簡單HelloWord網頁的示例代碼

    Python+Django實現簡單HelloWord網頁的示例代碼

    本文主要介紹了Python+Django實現簡單HelloWord網頁的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Pytorch中TensorBoard及torchsummary的使用詳解

    Pytorch中TensorBoard及torchsummary的使用詳解

    這篇文章主要介紹了Pytorch中TensorBoard及torchsummary的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • OpenCV灰度化之后圖片為綠色的解決

    OpenCV灰度化之后圖片為綠色的解決

    這篇文章主要介紹了OpenCV灰度化之后圖片為綠色的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Python中的super用法詳解

    Python中的super用法詳解

    這篇文章主要介紹了Python中的super用法詳解,本文講解了關于super問題的發(fā)現與提出、走進Python的源碼世界分析super的實現、延續(xù)的討論super等內容,需要的朋友可以參考下
    2015-05-05
  • 解決pycharm界面不能顯示中文的問題

    解決pycharm界面不能顯示中文的問題

    今天小編就為大家分享一篇解決pycharm界面不能顯示中文的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 一文帶你探尋Python中的裝飾器

    一文帶你探尋Python中的裝飾器

    這篇文章就來和大家詳細講一講Python中裝飾器的相關知識,文中的示例代碼講解詳細,對我們深入了解Python有一定的幫助,感興趣的可以了解一下
    2023-04-04
  • Python調用百度AI實現圖片上表格識別功能

    Python調用百度AI實現圖片上表格識別功能

    這篇文章主要給大家介紹了關于Python調用百度AI實現圖片上表格識別功能的相關資料,在Python環(huán)境下,利用百度AI開放平臺文字識別技術,對表格類圖片進行識別,需要的朋友可以參考下
    2021-09-09
  • Django 項目通過加載不同env文件來區(qū)分不同環(huán)境

    Django 項目通過加載不同env文件來區(qū)分不同環(huán)境

    這篇文章主要介紹了Django 項目如何通過加載不同env文件來區(qū)分不同環(huán)境,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Python中的取整、取余運算方法

    Python中的取整、取余運算方法

    數據處理是編程中不可避免的,很多時候都需要根據需求把獲取到的數據進行處理,取整則是最基本的數據處理。取整的方式則包括向下取整、四舍五入、向上取整等等,這篇文章主要介紹了Python中的取整、取余運算,需要的朋友可以參考下
    2022-11-11
  • Django MEDIA的配置及用法詳解

    Django MEDIA的配置及用法詳解

    這篇文章主要介紹了Django MEDIA的配置及用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07

最新評論