<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3519字,需瀏覽 8分鐘

           ·

          2022-04-28 23:04

          點(diǎn)擊上方“Python共享之家”,進(jìn)行關(guān)注

          回復(fù)“資源”即可獲贈(zèng)Python學(xué)習(xí)資料

          牛渚西江夜,青天無片云。

          大家好,我是皮皮。

          一、前言

          前幾天在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)頁詳情頁里邊也有多次請求,記得稍微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ā)送請求??獲取響應(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ā)生請求
          ????????????????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ò)誤問題,文中針對該問題給出了具體的解析和代碼演示,幫助粉絲順利解決了問題。最后給大家安利了一個(gè)url拼接的方法,在網(wǎng)絡(luò)爬蟲中還是非常常用的。

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

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

          -------------------?End?-------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請?jiān)诤笈_(tái)回復(fù)【

          萬水千山總是情,點(diǎn)個(gè)【在看】行不行

          瀏覽 30
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产黄页| 俺也来也去成人拍拍网 | www.4438久久 www.豆花视频在线 | 黄色一级电影视频 | 免费可以在线看A∨网站 |