日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

1.學習beautifulsoup

Step.1 BeautifulSoup是基于標簽的,所以我們第一步要準確定位到我們需- 要信息所在的標簽。

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

Step.3 對于提取數據的簡單處理

2.使用beautifulsoup提取丁香園論壇的回復內容

2.1用戶瀏覽器訪問目標網站并檢查目標內容所在標簽

BeautifulSoup是一個可以將復雜的HTML文檔轉換成一個復雜的樹形結構,每個節點都是python對象,所有對象可以歸納為4種:Tag、NavigableString、BeautifuSoup和Comment。

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

目標網址:

按F12可看見網站結構及回復內容所在標簽如下圖:

image.png

2.2獲取回復內容和用戶名

我們所需的評論內容就在td class="postbody"標簽下,利用BeautifulSoup獲取內容

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

我們需要的用戶名在

標簽下,利用BeautifulSoup獲取內容

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

find函數用法:

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

這些參數相當于過濾器一樣可以進行篩選處理。不同的參數過濾可以應用到以下情況:

查找標簽,基于name參數

查找文本,基于text參數

基于正則表達式的查找

查找標簽的屬性,基于attrs參數

基于函數的查找

附源碼:

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.學習xpath,使用lxml+xpath提取內容

什么是 XPath?

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

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

下面列出了最有用的路徑表達式:

表達式

描述

nodename

選取此節點的所有子節點

/

從根節點選取

//

從匹配選擇的當前節點選擇文檔中節點,從而不考慮節點的位置

.

選取當前節點

..

選取當前節點的父節點

@

選取屬性

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

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

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

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

4.使用xpath提取丁香園論壇的回復內容

# _*_ 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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。