zf_利用feapder中的selenium網頁爬取資料

我爱你的發表於2024-06-03
"http://www.ccgp.gov.cn/cggg/dfgg/"
#個人學習用切勿其他用途


# 標題 name
# 釋出時間 publish_time
# 地域 location
# 採購人 purchaser
# 採購網址 url





#前提配置資料庫安裝feapder庫


import random
import re
import time

import feapder
from feapder.utils.webdriver import WebDriver
from parsel import Selector
from feapder.db.mysqldb import MysqlDB
from selenium.webdriver.common.by import By



class TestRender(feapder.AirSpider):
db = MysqlDB()

__custom_setting__ = dict(
WEBDRIVER=dict(
pool_size=1, # 瀏覽器的數量
load_images=True, # 是否載入圖片
user_agent=None, # 字串 或 無參函式,返回值為user_agent
proxy=None, # xxx.xxx.xxx.xxx:xxxx 或 無參函式,返回值為代理地址
headless=False, # 是否為無頭瀏覽器
driver_type="CHROME", # CHROME、EDGE、PHANTOMJS、FIREFOX
timeout=30, # 請求超時時間
window_size=(1024, 800), # 視窗大小
executable_path=None, # 瀏覽器路徑,預設為預設路徑
render_time=0, # 渲染時長,即開啟網頁等待指定時間後再獲取原始碼
custom_argument=["--ignore-certificate-errors"], # 自定義瀏覽器渲染引數
# xhr_url_regexes=[
# "/ad",
# ], # 攔截 http://www.spidertools.cn/spidertools/ad 介面
)
)

def start_requests(self):
for i in range(5):
if i == 0:
url = 'https://www.ccgp.gov.cn/cggg/dfgg/index.htm'
else:
url = f'https://www.ccgp.gov.cn/cggg/dfgg/index_{i}.htm'
yield feapder.Request(url, render=True,xxx='https://www.ccgp.gov.cn/cggg/dfgg/')


def parse(self, request, response):
browser: WebDriver = response.browser
time.sleep(random.randint(3, 5))
li = Selector(browser.page_source).xpath('//ul[@class="c_list_bid"]/li/a/@href').extract()
for url in li:
url1 = request.xxx + url.replace('./','')
print(url1)
        #browser = browser 將瀏覽器控制代碼需要傳遞到下一頁
            yield feapder.Request(url=url1, render=True,callback=self.parse_1,browser = browser)


def parse_1(self, request, response):
time.sleep(random.randint(1, 2))
    #獲取瀏覽器控制代碼
browser = request.browser


# 標題 title
# 釋出時間 publish_time
# 地域 location
# 採購人 purchaser
# 採購網址 url
# 採購正文 text
li = Selector(browser.page_source).xpath('//div[@class="table"]/table/tbody')
item = {}

'//*[@id="detail"]/div[2]/div/div[2]/div/div[2]/table/tbody/tr[2]'
item["title"] = li.xpath('./tr[2]/td[@colspan="3"]/text()').get('').strip()
'//*[@id="detail"]/div[2]/div/div[2]/div/div[2]/table/tbody/tr[5]/td[4]'
item["publish_time"] = li.xpath('./tr[5]/td[4]/text()').get('').strip()

'//*[@id="detail"]/div[2]/div/div[2]/div/div[2]/table/tbody/tr[11]'
item["location"] = li.xpath('./tr[11]/td[2]/text()').get('').strip()

'//*[@id="detail"]/div[2]/div/div[2]/div/div[2]/table/tbody/tr[4]/td[2]'
item["purchaser"] = li.xpath('./tr[4]/td[2]/text()').get('').strip()
item["url"] = request.url
# item["text"] = li.xpath('./tr[2]/td[@colspan="3"]/text()').get('').strip()


print(item)
# 寫入資料庫
self.db.add_smart("zf_table", item)



if __name__ == "__main__":
TestRender().start()

相關文章