91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用python 爬蟲爬取信息時會遇到哪些問題

發布時間:2020-11-24 14:09:54 來源:億速云 閱讀:229 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關使用python 爬蟲爬取信息時會遇到哪些問題,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

爬取代碼:

import requests
from requests.exceptions import RequestException
from pyquery import PyQuery as pq
from bs4 import BeautifulSoup
import pymongo
from config import *
from multiprocessing import Pool

client = pymongo.MongoClient(MONGO_URL)  # 申明連接對象
db = client[MONGO_DB]  # 申明數據庫

def get_one_page_html(url):  # 獲取網站每一頁的html
  headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
           "Chrome/85.0.4183.121 Safari/537.36"
  }
  try:
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
      return response.text
    else:
      return None
  except RequestException:
    return None


def get_room_url(html):  # 獲取當前頁面上所有room_info的url
  doc = pq(html)
  room_urls = doc('.r_lbx .r_lbx_cen .r_lbx_cena a').items()
  return room_urls


def parser_room_page(room_html):
  soup = BeautifulSoup(room_html, 'lxml')
  title = soup.h2.text
  price = soup.find('div', {'class': 'room-price-sale'}).text[:-3]
  x = soup.find_all('div', {'class': 'room-list'})
  area = x[0].text[7:-11]  # 面積
  bianhao = x[1].text[4:]
  house_type = x[2].text.strip()[3:7]  # 戶型
  floor = x[5].text[4:-2]  # 樓層
  location1 = x[6].find_all('a')[0].text  # 分區
  location2 = x[6].find_all('a')[1].text
  location3 = x[6].find_all('a')[2].text
  subway = x[7].text[4:]
  addition = soup.find_all('div', {'class': 'room-title'})[0].text
  yield {
    'title': title,
    'price': price,
    'area': area,
    'bianhao': bianhao,
    'house_type': house_type,
    'floor': floor,
    'location1': location1,
    'location2': location2,
    'location3': location3,
    'subway': subway,
    'addition': addition
  }


def save_to_mongo(result):
  if db[MONGO_TABLE].insert_one(result):
    print('存儲到mongodb成功', result)
    return True
  return False


def main(page):
  url = 'http://www.xxxxx.com/room/sz?page=' + str(page)  # url就不粘啦,嘻嘻
  html = get_one_page_html(url)
  room_urls = get_room_url(html)
  for room_url in room_urls:
    room_url_href = room_url.attr('href')
    room_html = get_one_page_html(room_url_href)
    if room_html is None:  # 非常重要,否則room_html為None時會報錯
      pass
    else:
      results = parser_room_page(room_html)
      for result in results:
        save_to_mongo(result)

if __name__ == '__main__':
  pool = Pool() # 使用多進程提高爬取效率
  pool.map(main, [i for i in range(1, 258)])

在寫爬取代碼過程中遇到了兩個問題:

(一)在get_room_url(html)函數中,開始是想直接return每個租房信息的room_url,但是return不同于print,函數運行到return時就會結束該函數,這樣就只能返回每頁第一個租房room_url。解決辦法是:return 包含每頁所有room_url的generator生成器,在main函數中用for循環遍歷,再從每個room_url中獲取href,傳入到get_one_page_html(room_url_href)中進行解析。

(二)沒有寫第76行的if語句,我默認get_one_page_html(room_url_href)返回的room_html不為空,因此出現multiprocessing.pool.RemoteTraceback報錯:

使用python 爬蟲爬取信息時會遇到哪些問題

上圖中顯示markup為None情況下報錯,點擊藍色"F:\ProgramFiles\anaconda3\lib\site-packages\bs4\__init__.py"發現markup為room_html,即部分room_html出現None情況。要解決這個問題,必須讓代碼跳過room_html is None的情況,因此添加 if 語句解決了這個問題。

最終成功爬取某租房公寓深圳市258頁共4755條租房信息,為下一步進行數據分析做準備。

使用python 爬蟲爬取信息時會遇到哪些問題

其中單條信息:

使用python 爬蟲爬取信息時會遇到哪些問題

看完上述內容,你們對使用python 爬蟲爬取信息時會遇到哪些問題有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岗巴县| 高雄县| 天镇县| 清丰县| 普陀区| 清苑县| 大名县| 晴隆县| 白城市| 余姚市| 云南省| 榆树市| 昂仁县| 乌兰浩特市| 靖远县| 韩城市| 尚志市| 荥阳市| 宜宾县| 吐鲁番市| 昆山市| 普安县| 桑日县| 晋州市| 太原市| 浦江县| 荆州市| 崇义县| 马鞍山市| 东山县| 东阿县| 石门县| 涪陵区| 河池市| 青浦区| 维西| 雷山县| 郯城县| 铁岭市| 吐鲁番市| 宣汉县|