方法一:xpath
from lxml import etree
import requests
from requests import exceptions
def get_response(url, headers=none, timeout=none):
""""
當條件為假,斷言失敗
assert response.status_code == 200'請求報錯,請求狀態碼為: %s'%str(response.status_code)
content = etree_html.xpath(xpath) # list 型別
for each in content:
# 把結果中的換行和空格去掉
re_each = each.replace('\n', '').replace(' ', '')
if re_each == '\n' or re_each == '':
continue
else:
# print(re_each)
return result
# 然後
def get_spider_content_xpath(self):
# func01. 獲取原始碼, 通過 xpath 爬取資料
html = get_response(self.url, param.headers, 10)
etree_html = etree.html(html.text)
result = get_content(etree_html, param.xpath) # 這裡param.xpath是封裝的xpath引數
return result
result 就是通過 xpath 方式得到的資料內容;
其中,xpath 我寫了個簡單例子:
xpath = "//div[@class='article-item-box csdn-tracking-statistics']/h4/a/text()"
方法二:正則匹配
from lxml import etree
import requests
from requests import exceptions
def get_response(url, headers=none, timeout=none):
""""
當條件為假,斷言失敗
assert response.status_code == 200'請求報錯,請求狀態碼為: %s'%str(response.status_code)
# 然後
def get_spider_content_re(self):
# func02. 獲取原始碼,直接通過原始碼正則匹配爬取資料
# 需要配置引數:url 和 headers 中的user-agent ,均在 param 中配置
html = get_response(self.url, param.headers, 10)
html_text = html.text
# 正則匹配頁面所有url
# list 去重 -- list({}.fromkeys(list).keys())
urls = list({}.fromkeys(urls).keys())
return urls
urls 就是要匹配的內容
其中,匹配 url 的正規表示式還算可用,試了很多版本,個人認為這個表示式還算靠譜:
'http[s]?://(?:[a-za-z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fa-f][0-9a-fa-f]))+'
方法三:標籤 beautifulsoup find find_all
import requests
from urllib.parse import urlparse
from urllib import request, parse
from bs4 import beautifulsoup
word = '周杰倫'
url = '' + urllib.parse.quote(word) + '&pn=0'
page = request.urlopen(url).read()
soup = beautifulsoup(page, 'lxml')
tagh3 = soup.find_all('a') # 返回 list
hrefs =
for h3 in tagh3:
# href = h3.find('a').get('href')
try:
href = h3.get('href')
except:
pass
else:
hrefs 就是通過標籤獲取到的內容,這裡我獲取的是頁面所有 url
方法四:標籤 beautifulsoup select
import urllib
import requests
from urllib.parse import urlparse
from urllib import request
from bs4 import beautifulsoup
word = '周杰倫'
url = '' + urllib.parse.quote(word) + '&pn=0'
page = request.urlopen(url).read()
soup = beautifulsoup(page, 'lxml')
# tagh3 = soup.select('h3 > a[href]')
tags = soup.select('a[href]') # 返回 list,同級不需要空格分隔
hrefs =
for tag in tags:
hrefs = list({}.fromkeys(hrefs).keys()) # 去重
hrefs 就是通過標籤 select 方法獲取到的內容,這裡我獲取的是頁面上所有 url; python3爬取電影資料
爬取電影票房資料,用於統計建模分析。目標 為電影票房資料庫 基本的爬取靜態 的技術,模擬登陸使用的是最簡單的cookies。這種模擬登陸的方式雖然簡單但有很大的侷限性,時效性比較短,也許兩三天後就失效了,或者網頁改版一點也會導致失效。最好的方式還是找到登陸頁面,獲取需要提交的資料和提交方式,模擬我們...
python3 小說爬取案例
爬取 具體書籍 res requests.get url,headers header 爬取網頁 web res.text 獲得網頁文字格式 正則匹配方法 匹配除了空格和換行之外的字元 s s 上面的匹配方法無效的時候用這個匹配全部的字元,再用上面的方法進行匹配。具體應用舉例 pattern4 re...
python3爬取高畫質桌布 2
上次只是爬取乙個 的,這次要爬取一整個頁面的所有 的。在上次的 的基礎上進行修改就行了,從 的索引頁面開始,爬取該頁面上所有的 的鏈結,再套用上次的 就行了。若要爬取多個頁面只需在外圍套上乙個迴圈就可以了。如下 import requests import refrom bs4 import bea...