python 爬蟲學習練習爬取電影、小說

  沒事百度了不少爬蟲內容,主要是爲了學習關於爬蟲基礎知識。所以借鑑參考了很多的內容,因爲並不熟悉pyquery的爬蟲框架,只能不斷的嘗試去研究一番才行。對於小白,定位信息的難度看的有些懵,只能去不斷試驗和嘗試。css

一、用百度來練習一下,熟悉一下爬蟲框架pyquery使用方法

 

 

 首頁a標籤的內容,能夠經過瀏覽器去獲取css定位信息html

 

 

 具體的爬取練習,比較簡陋,爲了更加明確的去獲取想要的信息瀏覽器

import requests
from pyquery import PyQuery as pq
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                         'Chrome/92.0.4515.126 Safari/537.36',
           'HOST': 'www.baidu.com'}
url = 'http://www.baidu.com'

try:
    response = requests.get(url, headers=headers)
    if response.status_code == 200:  # 由狀態碼判斷返回結果
        html = response.text
        doc = pq(html)
        for i in doc:
            print(doc('title').text())  # 顯示頁面title信息
            print(doc('div#s-top-left a').text())  # 顯示百度頁面左上角a標籤信息
except BaseException as e:
    print(e)

運行的結果以下所示:框架

二、直接上代碼,爬取豆瓣TOP250  

import csv
import time
from pyquery import PyQuery as pq
import requests

# 獲取電影信息並寫入到CSV文件中
def getDBMovie(baseurl):
    headers = {
        'Host': 'movie.douban.com',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/86.0.4240.111 Safari/537.36'
    }
    try:
        html = requests.get(baseurl, headers=headers).text
        html = pq(html)
        mvList = html('.item').items()
        for item in mvList:
            num = item.find('.pic em').text()   # 此處括號內容是css定位元素信息
            title = item.find('.title').html()
            link = item.find('.pic a').attr('href')
            star = item.find('.rating_num').text()
            # print(num, title, link, star)
            # 打開文件並寫入信息
            with open('doubanMoive.csv', 'a', encoding='utf-8', newline='') as f:
                csv_write = csv.writer(f)
                csv_write.writerow([num, title, link, star])
    except BaseException as e:
        print(e)

# 建立存儲的csv文件,並添加表頭:序號、電影名稱、連接、評分
def createFile():
    with open('doubanMoive.csv', 'w', encoding='utf-8', newline='') as f:
        csv_write = csv.writer(f)
        csv_write.writerow(['序號', '電影名稱', '連接', '評分'])


# def saveFile(num, title, link, star):
#     with open('doubanMoive.csv', 'a', encoding='utf-8', newline='') as f:
#         csv_write = csv.writer(f)
#         csv_write.writerow([num, title, link, star])


if __name__ == '__main__':
    createFile()
    for page in range(0, 250, 25):
        base_url = 'http://movie.douban.com/top250?start={}'.format(page)
        getDBMovie(base_url)
        time.sleep(3)  # 設置一下時間,否則ip很容易被douban封掉

看一下CSV文件內容:學習

 

 

 因爲獲取的信息比較少,能夠再次進行優化,應該是能夠獲取更多的信息優化

三、爬取小說

在爬取小說的時候,問題最大的應該就亂碼的問題了。因此須要注意的地方,應該是編碼了。網站

這裏使用的爬蟲框架是BeautifulSoup編碼

from bs4 import BeautifulSoup
import requests

url = 'https://www.17k.com/chapter/3038645/38755562.html'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/92.0.4515.134 Safari/537.36'
}
page_req = requests.get(url, headers=headers)
html = page_req.text.encode('iso-8859-1')  # 編碼信息 嘗試使用utf8,看到的信息都是亂碼
bf = BeautifulSoup(html, 'html.parser')
texts = bf.find_all('div', class_='readAreaBox content')  # 帶入了標題等信息
# texts = bf.find_all('div', class_='p')  # 章節信息
print(texts[0].text)
# print(type(texts))
# print(texts[0].text.replace('\xa0' * 8, '\n\n')) # 頁面字段處理
# 寫入到文件中
# with open('demo_scrap.txt', 'a', encoding='utf-8') as f:
#     f.write(texts[0].text)

看一下運行的效果圖:url

 

爬取了另外一個小說網站spa

from bs4 import BeautifulSoup
import requests


url = 'https://www.biqooge.com/0_1/1.html'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/92.0.4515.134 Safari/537.36'
}
page_req = requests.get(url, headers=headers)
html = page_req.text.encode('iso-8859-1')
bf = BeautifulSoup(html, 'html.parser')
texts = bf.find_all('div', id='content')
# print(texts[0].text)
print(texts[0].text.replace('\xa0' * 8, '\n\n'))

效果以下:

 

   各類大膽的嘗試,不過也有些網站沒法爬取到數據。對於爬蟲,整體感受和使用自動化框架selenium有些共通的部分,若是使用selenium,估計就不會被識別爲爬蟲的機器人了,這是一個思路。哈哈

還須要去慢慢嘗試使用不一樣的框架去獲取到本身想要看到數據才行,分享一下實驗結果,歡迎各位大神來一塊兒來討論,謝謝!

相關文章
相關標籤/搜索