日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

python爬虫beautifulsoup_python爬虫初步之BeautifulSoup实战

發(fā)布時間:2023/12/15 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫beautifulsoup_python爬虫初步之BeautifulSoup实战 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.學(xué)習(xí)beautifulsoup

Step.1 BeautifulSoup是基于標(biāo)簽的,所以我們第一步要準(zhǔn)確定位到我們需- 要信息所在的標(biāo)簽。

Step.2 從定位的標(biāo)簽中提取我們需要的信息(一般在屬性或者在string中)

Step.3 對于提取數(shù)據(jù)的簡單處理

2.使用beautifulsoup提取丁香園論壇的回復(fù)內(nèi)容

2.1用戶瀏覽器訪問目標(biāo)網(wǎng)站并檢查目標(biāo)內(nèi)容所在標(biāo)簽

BeautifulSoup是一個可以將復(fù)雜的HTML文檔轉(zhuǎn)換成一個復(fù)雜的樹形結(jié)構(gòu),每個節(jié)點都是python對象,所有對象可以歸納為4種:Tag、NavigableString、BeautifuSoup和Comment。

下面邊爬取論壇邊介紹每個對象的意義以及方法。

目標(biāo)網(wǎng)址:

按F12可看見網(wǎng)站結(jié)構(gòu)及回復(fù)內(nèi)容所在標(biāo)簽如下圖:

image.png

2.2獲取回復(fù)內(nèi)容和用戶名

我們所需的評論內(nèi)容就在td class="postbody"標(biāo)簽下,利用BeautifulSoup獲取內(nèi)容

content = data.find("td", class_="postbody").text

我們需要的用戶名在

標(biāo)簽下,利用BeautifulSoup獲取內(nèi)容

name = data.find("div", class_="auth").text

find函數(shù)用法:

find(name, attrs, recursive, text, **wargs)    # recursive 遞歸的,循環(huán)的

這些參數(shù)相當(dāng)于過濾器一樣可以進(jìn)行篩選處理。不同的參數(shù)過濾可以應(yīng)用到以下情況:

查找標(biāo)簽,基于name參數(shù)

查找文本,基于text參數(shù)

基于正則表達(dá)式的查找

查找標(biāo)簽的屬性,基于attrs參數(shù)

基于函數(shù)的查找

附源碼:

import urllib.request

from bs4 import BeautifulSoup as bs

def main():

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "

"Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"

}

url = 'http://www.dxy.cn/bbs/thread/626626'

request = urllib.request.Request(url, headers=headers)

response = urllib.request.urlopen(request).read().decode("utf-8")

html = bs(response, 'lxml')

getItem(html)

def getItem(html):

datas = [] # 用來存放獲取的用戶名和評論

for data in html.find_all("tbody"):

try:

username = data.find("div", class_="auth").get_text(strip=True)

print(username)

content = data.find("td", class_="postbody").get_text(strip=True)

print(content)

datas.append((username,content))

except:

pass

print(datas)

if __name__ == '__main__':

main()

截圖:

image.png

3.學(xué)習(xí)xpath,使用lxml+xpath提取內(nèi)容

什么是 XPath?

XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。

在 XPath 中,有七種類型的節(jié)點:元素、屬性、文本、命名空間、處理指令、注釋以及文檔(根)節(jié)點。XML 文檔是被作為節(jié)點樹來對待的。

下面列出了最有用的路徑表達(dá)式:

表達(dá)式

描述

nodename

選取此節(jié)點的所有子節(jié)點

/

從根節(jié)點選取

//

從匹配選擇的當(dāng)前節(jié)點選擇文檔中節(jié)點,從而不考慮節(jié)點的位置

.

選取當(dāng)前節(jié)點

..

選取當(dāng)前節(jié)點的父節(jié)點

@

選取屬性

Xpath中text(),string(),data()的區(qū)別如下:

text()僅僅返回所指元素的文本內(nèi)容。

string()函數(shù)會得到所指元素的所有節(jié)點文本內(nèi)容,這些文本講會被拼接成一個字符串。

data()大多數(shù)時候,data()函數(shù)和string()函數(shù)通用,而且不建議經(jīng)常使用data()函數(shù),有數(shù)據(jù)表明,該函數(shù)會影響XPath的性能。

4.使用xpath提取丁香園論壇的回復(fù)內(nèi)容

# _*_ coding:utf-8 _*_

from contextlib import closing

import requests, json, re, os, sys, random, time

from urllib.request import urlopen

import urllib

from lxml import etree

class getUrl(object):

def __init__(self):

self.headers={

"Connection": "keep-alive",

"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",

"Accept-Encoding": "gzip, deflate",

"Accept-Language": "zh-CN,zh;q=0.9"

};

def run(self):

url = "http://www.dxy.cn/bbs/thread/626626"

req = requests.get(url,headers=self.headers)

html = req.text

tree = etree.HTML(html)

user = tree.xpath('//div[@class="auth"]/a/text()')

content = tree.xpath('//td[@class="postbody"]')

result = []

for i in range(0,len(user)):

#print(content[i])

print(content[i].xpath('string(.)'))

print(user[i].strip()+":"+content[i].xpath('string(.)'))

print('*'*80)

if __name__ == '__main__':

geturl = getUrl()

geturl.run()

截圖:

image.png

總結(jié)

以上是生活随笔為你收集整理的python爬虫beautifulsoup_python爬虫初步之BeautifulSoup实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。