日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python爬虫不会?戳一下,小编一步步教你写一个简单的爬虫

發(fā)布時間:2025/3/20 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫不会?戳一下,小编一步步教你写一个简单的爬虫 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

寫在前面

網(wǎng)絡(luò)爬蟲又稱網(wǎng)絡(luò)蜘蛛,是指按照某種規(guī)則在網(wǎng)絡(luò)上爬取所需內(nèi)容的腳本程序。眾所周知,每個網(wǎng)頁通常包含其他網(wǎng)頁的入口,網(wǎng)絡(luò)爬蟲則通過一個網(wǎng)址依次進(jìn)入其他網(wǎng)址獲取所需內(nèi)容。

優(yōu)先申明:我們使用的python編譯環(huán)境為PyCharm

正文

一、首先一個網(wǎng)絡(luò)爬蟲的組成結(jié)構(gòu):

爬蟲調(diào)度程序(程序的入口,用于啟動整個程序)

url管理器(用于管理未爬取得url及已經(jīng)爬取過的url)

網(wǎng)頁下載器(用于下載網(wǎng)頁內(nèi)容用于分析)

網(wǎng)頁解析器(用于解析下載的網(wǎng)頁,獲取新的url和所需內(nèi)容)

網(wǎng)頁輸出器(用于把獲取到的內(nèi)容以文件的形式輸出)

二、編寫網(wǎng)絡(luò)爬蟲

(1)準(zhǔn)備所需庫

我們需要準(zhǔn)備一款名為BeautifulSoup(網(wǎng)頁解析)的開源庫,用于對下載的網(wǎng)頁進(jìn)行解析,我們是用的是PyCharm編譯環(huán)境所以可以直接下載該開源庫。

步驟如下:

選擇File->Settings

打開Project:PythonProject下的Project interpreter

點擊加號添加新的庫

輸入bs4選擇bs4點擊Install Packge進(jìn)行下載

(2)編寫爬蟲調(diào)度程序

這里的bike_spider是項目名稱引入的四個類分別對應(yīng)下面的四段代碼url管理器,url下載器,url解析器,url輸出器。

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助, 群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' # 爬蟲調(diào)度程序from bike_spider import url_manager, html_downloader, html_parser, html_outputer# 爬蟲初始化class SpiderMain(object):def __init__(self):self.urls = url_manager.UrlManager()self.downloader = html_downloader.HtmlDownloader()self.parser = html_parser.HtmlParser()self.outputer = html_outputer.HtmlOutputer()def craw(self, my_root_url):count = 1self.urls.add_new_url(my_root_url)while self.urls.has_new_url():try:new_url = self.urls.get_new_url()print("craw %d : %s" % (count, new_url))# 下載網(wǎng)頁html_cont = self.downloader.download(new_url)# 解析網(wǎng)頁new_urls, new_data = self.parser.parse(new_url, html_cont)self.urls.add_new_urls(new_urls)# 網(wǎng)頁輸出器收集數(shù)據(jù)self.outputer.collect_data(new_data)if count == 10:breakcount += 1except:print("craw failed")self.outputer.output_html()if __name__ == "__main__":root_url = "http://baike.baidu.com/item/Python/407313"obj_spider = SpiderMain()obj_spider.craw(root_url)

(3)編寫url管理器

我們把已經(jīng)爬取過的url和未爬取的url分開存放以便我們不會重復(fù)爬取某些已經(jīng)爬取過的網(wǎng)頁。

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助, 群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' # url管理器class UrlManager(object):def __init__(self):self.new_urls = set()self.old_urls = set()def add_new_url(self, url):if url is None:returnif url not in self.new_urls and url not in self.old_urls:self.new_urls.add(url)def add_new_urls(self, urls):if urls is None or len(urls) == 0:returnfor url in urls:self.new_urls.add(url)def get_new_url(self):# pop方法會幫我們獲取一個url并且移除它new_url = self.new_urls.pop()self.old_urls.add(new_url)return new_urldef has_new_url(self):return len(self.new_urls) != 0

(4)編寫網(wǎng)頁下載器

通過網(wǎng)絡(luò)請求來下載頁面

# 網(wǎng)頁下載器import urllib.requestclass HtmlDownloader(object):def download(self, url):if url is None:return Noneresponse = urllib.request.urlopen(url)# code不為200則請求失敗if response.getcode() != 200:return Nonereturn response.read()

(5)編寫網(wǎng)頁解析器

對網(wǎng)頁進(jìn)行解析時我們需要知道我們要查詢的內(nèi)容都有哪些特征,我們可以打開一個網(wǎng)頁點擊右鍵審查元素來了解我們所查內(nèi)容的共同之處。

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助, 群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' # 網(wǎng)頁解析器import refrom bs4 import BeautifulSoupfrom urllib.parse import urljoinclass HtmlParser(object):def parse(self, page_url, html_cont):if page_url is None or html_cont is None:returnsoup = BeautifulSoup(html_cont, "html.parser", from_encoding="utf-8")new_urls = self._get_new_urls(page_url, soup)new_data = self._get_new_data(page_url, soup)return new_urls, new_datadef _get_new_data(self, page_url, soup):res_data = {"url": page_url}# 獲取標(biāo)題title_node = soup.find("dd", class_="lemmaWgt-lemmaTitle-title").find("h1")res_data["title"] = title_node.get_text()summary_node = soup.find("div", class_="lemma-summary")res_data["summary"] = summary_node.get_text()return res_datadef _get_new_urls(self, page_url, soup):new_urls = set()# 查找出所有符合下列條件的urllinks = soup.find_all("a", href=re.compile(r"/item/"))for link in links:new_url = link['href']# 獲取到的url不完整,學(xué)要拼接new_full_url = urljoin(page_url, new_url)new_urls.add(new_full_url)return new_urls

(6)編寫網(wǎng)頁輸出器

輸出的格式有很多種,我們選擇以html的形式輸出,這樣我們可以的到一個html頁面。

# 網(wǎng)頁輸出器class HtmlOutputer(object):def __init__(self):self.datas = []def collect_data(self, data):if data is None:returnself.datas.append(data)# 我們以html表格形式進(jìn)行輸出def output_html(self):fout = open("output.html", "w", encoding='utf-8')fout.write("<html>")fout.write("<meta charset='utf-8'>")fout.write("<body>")# 以表格輸出fout.write("<table>")for data in self.datas:# 一行fout.write("<tr>")# 每個單元行的內(nèi)容fout.write("<td>%s</td>" % data["url"])fout.write("<td>%s</td>" % data["title"])fout.write("<td>%s</td>" % data["summary"])fout.write("</tr>")fout.write("</table>")fout.write("</body>")fout.write("</html>")# 輸出完畢后一定要關(guān)閉輸出器fout.close()

寫在最后

對于爬蟲的學(xué)習(xí),小編建議大家還是多動手敲代碼,這樣不僅可以更好的理解,而且在敲代碼的過程中,遇到BUG時可以加深自己對于代碼的理解!

總結(jié)

以上是生活随笔為你收集整理的Python爬虫不会?戳一下,小编一步步教你写一个简单的爬虫的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 九九久久九九久久 | 国产又黄又猛又爽 | 亚洲第一页在线观看 | 天堂国产| 探花视频在线免费观看 | 美丽的姑娘在线观看免费 | 无码专区久久综合久中文字幕 | av夜夜操| 婷婷的五月天 | 91精品人妻一区二区三区 | 原创真实夫妻啪啪av | 亚洲国产黄色片 | 情侣自拍av | 亚洲国产免费看 | 国语对白做受按摩的注意事项 | 成人免费a级片 | 日韩欧美国产一区二区三区 | 欧美色就是色 | 日韩jizz| 一级性生活毛片 | 91这里只有精品 | 亚洲国产日韩欧美一区二区三区 | 欧美日韩999 | 妹子干综合 | 影音先锋在线观看视频 | 黄色a级片网站 | 中文字幕亚洲色图 | 能看毛片的网站 | 久久综合免费视频 | 日本韩国三级 | 五月天色婷婷综合 | 午夜写真片福利电影网 | 性高潮久久久久久久久 | 在线视频福利 | 亚洲精品乱码久久久久99 | 日韩视频在线免费播放 | 黄色一级黄色片 | 变态视屏 | 自拍偷拍欧美视频 | 无码人妻精品一区二区三 | 国产男女视频在线观看 | 国产一卡二卡三卡四卡 | 欧美高清免费 | 国产欧美网站 | 亚洲精品大全 | 久久免费国产 | 91aaaa| 国产精品一区二区三 | 初高中福利视频网站 | 在线观看视频 | 国产aⅴ精品一区二区三区久久 | xxx69美国| 国产成人一级片 | 色鬼综合 | 免费毛片在线播放免费 | 日本少妇bbwbbw精品 | 中文在线观看免费高清 | 国产超碰人人爽人人做人人爱 | 黑人巨大xxxxx性猛交 | 亚洲大逼| 亚洲色图视频在线观看 | 黄色视屏在线看 | 夜夜操夜夜骑 | 日日摸天天添天天添破 | 好吊妞在线 | 亚洲成年网 | 丝袜淫脚 | 五月天在线观看 | 精品亚洲一区二区三区四区五区 | 99久 | 国产ts丝袜人妖系列视频 | 伊人网综合网 | 深爱激情综合 | 国产白嫩美女无套久久 | 奇米成人影视 | 牛人盗摄一区二区三区视频 | 女同hd系列中文字幕 | 一区二区国产欧美 | 亚州男人的天堂 | 日韩欧美v | 久久人人精品 | 后入内射无码人妻一区 | 日韩成人自拍 | 四虎永久网址 | 欧美18免费视频 | 男人天堂黄色 | 精品久久久视频 | 1024手机看片日韩 | 久久久噜噜噜久久中文字幕色伊伊 | 国产又大又黑又粗免费视频 | 久久久久国产精品 | 欧洲日韩一区二区三区 | 日韩夜夜操 | 成年人免费黄色片 | 无码 制服 丝袜 国产 另类 | 一区二区三区资源 | 黄色一极视频 | 亚洲欧美日韩精品在线 | 女人18毛片毛片毛片毛片区二 |