Python簡單爬蟲入門三

咱們繼續研究BeautifulSoup分類打印輸出

Python簡單爬蟲入門一

Python簡單爬蟲入門二

前兩部主要講述咱們如何用BeautifulSoup怎去抓取網頁信息以及獲取相應的圖片標題等信息,php

等於咱們已經只知道如何用工具去瀏覽和檢索內容,可是實現只有你知道抓取的是什麼,這時候html

咱們須要整理分類,給他們命名以及分類這樣打印出來別人一看就知道標題是什麼,內容是什麼python

#!usr/bin/env python
# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import requests
import json

headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
    # 'Cookie':'CNZZDATA1260535040=242528197-1478672438-null%7C1478672438',
}
url= 'http://www.beiwo.tv/index.php?s=vod-search-id-14-tid--area--year-$search_year-order-gold.html'

wb_data = requests.get(url,headers=headers)
soup = BeautifulSoup(wb_data.text,'lxml')
imgs = soup.select(" ul.img-list.clearfix > li > a > img ")
titles = soup.select(" ul.img-list.clearfix > li > h5 ")
yanyuans = soup.select(" ul.img-list.clearfix > li > p")
stars = soup.select(" p.star > em")

J_data = {}
count = 0
for title,img,yanyuan,star in zip(titles,imgs,yanyuans,stars):
    data = {
        "title":title.get_text(),
        "img":img.get("src"),
        "演員":list(yanyuan.stripped_strings),
        "評分":star.get_text(),
    }
    J_data[count] = data
    count += 1
    print(data)

with open("test.txt",'w') as f:
    f.write(json.dumps(J_data))

我就直接把完整代碼發出來一點點來講:mysql

首先仍是標準格式導入相應方法這裏我多加了json用來保存抓去的數據,就用來放入txt文件內sql

headers假裝瀏覽器頭文件簡寫方式,url是你抓去網頁的地址(如今不少網站都有反爬保護愈來愈難爬取信息)數據庫

requests請求網頁服務返回的數據wb_data給BeautifulSoup去解析用lxml格式json

抓去的信息以下titles標題imgs圖片yanyuans演員stars評分都加了s是由於返回的是抓去的每項所有相關信息以列表返回瀏覽器

J_data字典後面保存時的格式,count用來計數順便用來當字典的Key鍵值,zip的方法我簡單介紹以下:cookie

能夠把兩個列表同一位置的值一一對應以元組返回行成新列表的方法在這裏我是用他來分類輸出咱們抓去相應信息工具

最後用了經常使用的寫入方法with能夠不用寫文件close關閉,處理完它會收拾後面操做,來看效果以下:

這裏咱們整理全部想要的數據及分類,這樣打印出來相信給其它人看也知道是什麼,因爲評分與演員放在一個標籤下因此沒有演員名時會有點BUG

在來看看txt文檔內保存了什麼以下:

不少人說報錯亂碼什麼的,其實\u6f14就是中文只是用unicode的編碼的格式寫入文本若是你在反向讀取仍是能夠正常打印出來的(因爲文件太長無法截取)

咱們就在新建一個py文件簡單教一下如何讀取文件內容代碼以下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import json

with open('test.txt','r') as f:
    dic = json.loads(f.readline())
    
for i in range(len(dic)):
    print(dic[str(i)])

導入json的方法模塊

打開文件test.txt模式r讀取而且命名f (上面生成的test.txt目錄是當前目錄,也就是3個文件是放在一塊兒的,若是要寫在其它地方請寫相對路徑)

因爲只有一行因此f.readline()讀取剛纔你們看到unicode編碼的文件以json.load的方式讀取,你是以json.dumps寫入因此讀取相應,返回的類型字典dic

用一個循環來經過字典的key來看到value就是剛纔的內容效果以下:

目前已經把基本的BeautifulSoup的基礎用法方法講完了,其實還能夠作不少擴展好比把抓去的數據存入mysql或其它數據庫等,寫入xls表格,因爲我這裏主要介紹BeautifulSoup,沒有介紹到,可是能夠作就當擴展練習吧

你們能夠去學習數據庫的基本用法和語句在結合這個爬去存放,也能夠學習python表格的第三方模塊把數據寫入excel內這樣也能夠顯得更加專業。最後仍是提醒只有多練習才能熟練運用這些工具,而且發現問題,

思考,解決與提升。最後也感謝能觀看到此的同窗和朋友們,我也會隨後時不時更新講解更好用的庫與方法。

相關文章
相關標籤/搜索