Python爬取X車之家配置資訊

2021-10-01 12:55:53 字數 3693 閱讀 7821

x車之家的配置資訊主要運用css3的偽類反爬,需要將正確值替換掉原來的類值就可以了。

獲取所有車系的id–seriesid 存入csv

獲取所有車系的介面

每個車系對應有不同的具體車的id–specid 存入csv 大約有38500個車每個車系對應的所有車的specid資訊介面

配置資訊的頁面url

提取頁面資訊,為接下來的拼接js做準備

匹配原始js裡需要提取的資訊

config = re.search(

"var config = (.*?)};"

, html, re.s)

# 車的引數

option = re.search(

"var option = (.*?)};"

, html, re.s)

# 主被動安全裝備

bag = re.search(

"var bag = (.*?)};"

, html, re.s)

# 選裝包

color = re.search(

"var color = (.*?)};"

, html, re.s)

# 外飾顏色

inner_color = re.search(

"var innercolor =(.*?)};"

, html, re.s)

# 內飾顏色

js_lists = re.findall(

'(\(function\([a-za-z].*?_\).*?\(document\);)'

, html)

拼接車型的所有引數car_info

car_info = car_info + config.group(0)

+ option.group(0)

+ bag.group(0)

+ color.group(0)

+ inner_color.group(

0)

封裝js,儲存為成本地html檔案

`dom =

("var rules = '2';"

"var document = {};"

"function getrules()"

"document.createelement = function() else "

" }"

" }"

" }"

"};"

"document.queryselectorall = function() ;"

"};"

"document.head = {};"

"var window = {};"

"window.decodeuricomponent = decodeuricomponent;"

)for item in js_lists:

dom = dom + item

html_type =

"" \

""# 待執行的js字串

with

open

("../htmlfile/js.html"

,"w"

, encoding=

"utf-8"

)as f:

f.write(js)`

通過selenium執行,用selenium執行本地的html檔案,js渲染後得到正確的資訊。

# 建立chrome引數物件

opt = options(

)opt.add_argument(

"--headless"

)browser = webdriver.chrome(options=opt,

executable_path=

"d:///learn/爬蟲練習/autohome/autohome/webdriver/chromedriver.exe"

)# 執行js的dom

browser.get(

"d:///learn/爬蟲練習/autohome/autohome/htmlfile/js.html"

)# 得到正確的對應值

true_text = browser.find_element_by_tag_name(

'body'

).text

用正確的值替換原來的值

# 匹配車輛引數中所有的span標籤

span_list = re.findall(

"", car_info)

# 按照span標籤與 true_text中的關鍵字進行替換

for span in span_list:

info = re.search(

"'(.*?)'"

, span)

if info:

class_info =

str(info.group(1)

)+"::before "

content = re.search(class_info, true_text)

.group(

1)

car_info = car_info.replace(

str(

"+ info.group(1)

+"'>"),

re.search(

"\"(.*?)\""

, content)

.group(1)

)

13.最後就是持久化。這裡有點麻煩,配置資訊太多,而且每個車的配置資訊都不盡相同。只能按照每個specid來提取配置資訊。

# 持久化

car_item =

config = re.search(

'var config = (.*?);var option'

, car_info)

.group(1)

option = re.search(

'var option = (.*?);var bag'

, car_info)

.group(1)

# bag = re.search('var bag = (.*?);var color', car_info).group(1)

color = re.search(

'var color = (.*?);var innercolor'

, car_info)

.group(1)

inner_color = re.search(

'var innercolor =(.*?);'

, car_info)

.group(

1)

最後儲存的結果是這樣

汽車之家的偽類反爬還是很厲害的,在參考網上大神的解法後弄了好久才爬取到資料。目前只是單執行緒在跑,速度很慢,後面繼續優化採用多執行緒。在此感謝這哥們

PYTHON爬取汽車之家資料

使用知識 使用說明 源 usr bin env python coding utf 8 time 2020 1 16 15 34 author wsx site file cars.py software pycharm import json from multiprocessing import...

Python練習 scrapy 爬取汽車之家文章

autohome.py spider檔案 coding utf 8 import scrapy from autohome.items import autohomeitem class autohomespider scrapy.spider name autohome allowed domai...

Python爬蟲之爬取動漫之家

python爬蟲之爬取動漫之家 小白上手爬蟲第一天,簡單爬取 動漫之家。小小目標 1.爬取5頁的動漫 2.以list返回其動漫位址和動漫名字 簡單粗暴,直接附上原始碼 import requests import re 獲取頁面 defgethtmltext url try kv r request...