偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

盤點(diǎn)一個(gè)網(wǎng)絡(luò)爬蟲中常見的一個(gè)錯(cuò)誤

開發(fā) 后端
這篇文章主要盤點(diǎn)一個(gè)網(wǎng)絡(luò)爬蟲中常見的一個(gè)錯(cuò)誤問題,文中針對(duì)該問題給出了具體的解析和代碼演示,幫助粉絲順利解決了問題。

大家好,我是皮皮。

一、前言

前幾天在Python白銀交流群有個(gè)叫【雨就是雨】的粉絲問了一個(gè)Python網(wǎng)絡(luò)爬蟲的問題,這里拿出來給大家分享下,一起學(xué)習(xí)下。

問題如下:

二、解決過程

這里很容易的一個(gè)懷疑點(diǎn)是原網(wǎng)頁上的網(wǎng)頁結(jié)構(gòu)變化了,使用xpath選擇器進(jìn)行提取的話,會(huì)出現(xiàn)不匹配的情況,列表索引不在范圍內(nèi),引起報(bào)錯(cuò)。

【Python進(jìn)階者】給出了一個(gè)思路,確實(shí)可以使用try異常處理來避開,不過始終拿不到數(shù)據(jù),確實(shí)有點(diǎn)讓人頭大。

后來下午的時(shí)候【Python進(jìn)階者】跑他代碼的時(shí)候發(fā)現(xiàn)了原因,如下圖所示。

他的url這里,構(gòu)造有問題,多了一個(gè)/,導(dǎo)致網(wǎng)頁訪問出錯(cuò)。

修改下,就可以跑了,另外,網(wǎng)頁詳情頁里邊也有多次請(qǐng)求,記得稍微sleep下,就可以了。下面是詳細(xì)代碼,感興趣的小伙伴們,可以拿去跑下。

import requests
from lxml import etree
from fake_useragent import UserAgent
import time
class kitchen(object):
u = 0
def __init__(self):
self.url = "https://www.xiachufang.com/category/40076/"
ua = UserAgent(verify_ssl=False)
for i in range(1, 50):
self.headers = {
'User-Agent': ua.random,
}
'''發(fā)送請(qǐng)求 獲取響應(yīng)'''
def get_page(self, url):
res = requests.get(url=url, headers=self.headers)
html = res.content.decode("utf-8")
time.sleep(2)
return html
def parse_page(self, html):
parse_html = etree.HTML(html)
image_src_list = parse_html.xpath('//li/div/a/@href')
for i in image_src_list:
try:
url = "https://www.xiachufang.com" + i
# print(url)
html1 = self.get_page(url) # 第二個(gè)發(fā)生請(qǐng)求
parse_html1 = etree.HTML(html1)
# print(parse_html1)
num = parse_html1.xpath('.//h2[@id="steps"]/text()')[0].strip()
name = parse_html1.xpath('.//li[@class="container"]/p/text()')
ingredients = parse_html1.xpath('.//td//a/text()')
self.u += 1
# print(self.u)
# print(str(self.u)+"."+house_dict["名 稱 :"]+":")
# da=tuple(house_dict["材 料:"])
food_info = '''
第 %s 種
菜 名 : %s
原 料 : %s
下 載 鏈 接 : %s,
=================================================================
''' % (str(self.u), num, ingredients, url)
# print(food_info)
f = open('下廚房菜譜.txt', 'a', encoding='utf-8')
f.write(str(food_info))
print(str(food_info))
f.close()
except:
print('xpath沒獲取到內(nèi)容!')
def main(self):
startPage = int(input("起始頁:"))
endPage = int(input("終止頁:"))
for page in range(startPage, endPage + 1):
url = self.url.format(page)
html = self.get_page(url)
self.parse_page(html)
time.sleep(2.4)
print("====================================第 %s 頁 爬 取 成 功====================================" % page)
if __name__ == '__main__':
imageSpider = kitchen()
imageSpider.main()

跑出來的結(jié)果會(huì)保存到一個(gè)txt文件里邊,如下圖所示:

碰到這種url拼接問題,推薦使用urljoin的方式,示例代碼如下:

from urllib.parse import urljoin
source_url = 'https://www.baidu.com/'
child_url1 = '/robots.txt'
child_url2 = 'robots.txt'
final_url1 = urljoin(source_url, child_url1)
final_url2 = urljoin(source_url, child_url2)
print(final_url1)
print(final_url2)

運(yùn)行結(jié)果如下圖所示:

urljoin的作用就是連接兩個(gè)參數(shù)的url,將第二個(gè)參數(shù)中缺的部分用第一個(gè)參數(shù)的補(bǔ)齊,如果第二個(gè)有完整的路徑,則以第二個(gè)為主。

三、總結(jié)

大家好,我是皮皮。這篇文章主要盤點(diǎn)一個(gè)網(wǎng)絡(luò)爬蟲中常見的一個(gè)錯(cuò)誤問題,文中針對(duì)該問題給出了具體的解析和代碼演示,幫助粉絲順利解決了問題。最后給大家安利了一個(gè)url拼接的方法,在網(wǎng)絡(luò)爬蟲中還是非常常用的。

最后感謝粉絲【雨就是雨】提問,感謝【Python進(jìn)階者】給出的具體解析和代碼演示,感謝粉絲【?】、【艾?!びX羅】、【月神】、【dcpeng】、【瑜亮老師】等人參與學(xué)習(xí)交流。

小伙伴們,快快用實(shí)踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何問題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。

責(zé)任編輯:龐桂玉 來源: Python共享之家
相關(guān)推薦

2021-06-16 17:46:55

函數(shù)指針結(jié)構(gòu)

2016-09-26 17:26:20

2013-04-12 09:24:26

2009-03-12 11:33:20

2023-01-03 12:30:25

架構(gòu)CPUGPU

2023-05-09 07:10:53

2012-07-30 09:40:52

Lua

2020-10-10 06:21:15

爬蟲互聯(lián)網(wǎng)

2014-10-14 15:50:19

UIAndroid

2016-03-01 14:37:47

華為

2021-12-27 08:58:28

低代碼開發(fā)數(shù)據(jù)安全

2022-10-10 09:00:35

ReactJSX組件

2018-03-07 16:15:32

網(wǎng)絡(luò)物聯(lián)網(wǎng)互聯(lián)網(wǎng)+

2010-07-17 14:24:50

視頻網(wǎng)站流量Blue Coat

2019-07-29 09:25:01

云優(yōu)先工作負(fù)載公共云

2021-08-26 07:43:44

vectorerase錯(cuò)誤

2023-01-12 08:47:26

二項(xiàng)式楊輝斐波那契

2011-09-16 10:00:56

C++

2018-07-20 14:30:15

2019-12-24 11:00:51

FedoraLive CD系統(tǒng)運(yùn)維
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)