from scrapy_plus.core.spider import spider
from scrapy_plus.htttp.request import request
class tencentspider(spider):
name = 'tencent'
start_urls = ['']
def parse(self, response): # 對start_urls進行解析
print(response.url + '*****')
tr_list = response.xpath('//*[@class="tablelist"]//tr')[1:-1]
print(len(tr_list))
for tr in tr_list:
item = {}
# 獲取一部分資料
item['name'] = tr.xpath('./td[1]/a/text()')[0]
item['address'] = tr.xpath('./td[4]/text()')[0]
item['time'] = tr.xpath('./td[5]/text()')[0]
# 獲取詳情頁url,並傳送請求
detail_url = '' + tr.xpath('./td[1]/a/@href')[0]
print(detail_url)
yield request(
detail_url,
parse='parse_detail',
meta=item # meta接收乙個字典
)# 翻頁
yield request(next_url, parse='parse')
def parse_detail(self, response):
# print(response.body)
item = response.meta # 獲取傳入的meta
item['job_content'] = response.xpath('//*[@class="squareli"]//text()')[0] # 加入崗位職責資料
print(item)
yield item
修改專案的settings.py
......
# 啟用的爬蟲類
]......
此時執行專案的main.py程式異常
indexerror: list index out of range
經過debug我們發現,是因為請求頭缺少了 user-agent!
##2 修改scrapy_plus**
# scrapy_plus/conf/default_settings.py
......
# 預設請求頭
# scrapy_plus/core/spider.py
......
from scrapy_plus.conf.settings import headers
......
def start_requests(self):
for url in self.start_urls:
# 此處修改
from scrapy_plus.conf.settings import headers # 此處新增
class request():
"""這是封裝的request物件"""
def __init__(self, url, method='get', data=none, headers=headers, parse='parse', meta={}, filter=true): # 此處修改
......
import time
from scrapy_plus.core.spider import spider
from scrapy_plus.htttp.request import request
import js2py
class sinagundong(spider):
name = "sina"
headers =
def start_requests(self):
while true:
# 需要發起這個請求,才能獲取到列表頁資料,並且返回的是乙個js語句
url = ""
yield request(url, parse='parse', filter=false)
time.sleep(60) # 每60秒發起一次請求
def parse(self, response):
'''響應體資料是js**'''
# 使用js2py模組,執行js**,獲取資料
ret = js2py.eval_js(response.body.decode("gbk")) # 對**分析發現,資料編碼格式是gbk的,因此需要先進行解碼
for news in ret.list: #
yield request(news["url"], headers=self.headers, parse='parse_detail', meta=)
def parse_detail(self, response):
# print(response.body)
response.body = response.body.decode("utf-8") # 部分頁面無法正確解碼,因此在這裡手動進行解碼操作
title = response.xpath("//h1[@class='main-title']/text()")[0]
pub_date = response.xpath("//span[@class='date']/text()")[0]
try:
author = response.xpath("//div[@class='date-source']//a/text()")[0] # 由於作者的提取,有兩種格式,因此這裡使用乙個異常捕獲來進行判斷
except indexerror:
author = response.xpath("//div[@class='date-source']//span[contains(@class,'source')]/text()")[0]
content = response.xpath("//div[@class='article']//text()") # 多個 每乙個代表一段
image_links = response.xpath("//div[@class='article']//img/@src") # 鏈結有多個
item =
print(item)
yield item
##2 在專案settings.py中開啟該爬蟲
# 修改預設日誌檔名稱
default_log_filename = '日誌.log' # 預設日誌檔名稱
# 啟用的爬蟲類
]# 啟用的管道類
]# 啟用的爬蟲中介軟體類
spider_middlewares =
**********_middlewares =
# scheduler_persist = true
# fp_persist = false
# async_type = 'coroutine' # 預設為執行緒的方式
如何自己實現乙個HTMLRunner
htmlrunner是模仿unittest自帶的texttestrunner 實現的,我們先來看看texttestrunner 的執行流程。import unittest suite unittest.defaulttestloader.discover with open report.txt w...
自己實現乙個Redux。
redux是乙個用於狀態管理的js框架,是flux架構的一種實現 如圖 reducer 為乙個使用者自定義的函式,在store分發 dispacth action時提供處理方法去更新狀態樹中的狀態。應該為乙個純函式。action 為乙個使用者自定義的物件,裡面包含乙個type屬性,標識乙個動作型別。...
如何自己寫乙個日曆
在很多 都有自己的乙個日曆工具,有些看起來挺酷的,肯定有很多人想學.但在這裡我不是要寫乙個,而是給出它的設計過程,即它的靈魂.第一步 首先我們要選擇要顯示的年份和月份.第二步 獲得這個月的最大天數 參照前面一篇文章 第三步 建立乙個日期物件,這個日期物件為這個月的第一天.第四步 得到這個日期物件的星...