Python---爬蟲案例

例1、爬取公眾號文章中的圖片。

1,首先打開要獲取公眾號文章的地址
2,按下F12,再按Ctrl Shift C,然后鼠標移動到圖片位置,然后觀察控制臺中顯示圖片對應的代碼位置
3,分析該位置的代碼段
在這里插入圖片描述
代碼段如下:
<img data-s="300,640" data-type="png" data-src="http://mmbiz.qpic.cn/mmbiz_png/xXrickrc6JTO9TThicnuGGR7DtzWtslaBl2kjpHsq1xSmicGGreQ5yUTK6W8JlX30aB50615I06bqib4Bk17F4nV8A/0?wx_fmt=png" style="width: 677px !important; height: auto !important; visibility: visible !important;" class data-ratio="0.5602272727272727" data-w="880" _width="677px" src="http://mmbiz.qpic.cn/mmbiz_png/xXrickrc6JTO9TThicnuGGR7DtzWtslaBl2kjpH…50615I06bqib4Bk17F4nV8A/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" crossorigin="anonymous" data-fail="0">
這里我們觀察這個代碼段的格式:然后編寫正則表達式

pattern = ‘data-type=“png” data-src="(.+?)"’
?       ---  匹配位于?之前的0個或1個字符
+		---  匹配位于+之前的字符或子模塊的1次或多次的出現
. 		---  匹配除換行符以外的任意單個字符
from re import findall
from urllib.request import urlopenurl = 'https://mp.weixin.qq.com/s?__biz=MzI4MzM2MDgyMQ==&mid=2247486249&idx=1&sn=a37d079f541b194970428fb2fd7a1ed4&chksm=eb8aa073dcfd2965f2d48c5ae9341a7f8a1c2ae2c79a68c7d2476d8573c91e1de2e237c98534&scene=21#wechat_redirect' #這個為要爬取公眾號圖片的地址
with urlopen(url) as fp:content=fp.read().decode('utf-8')pattern = 'data-type="png" data-src="(.+?)"'
#查找所有圖片鏈接地址
result = findall(pattern, content)  #捕獲分組
#逐個讀取圖片數據,并寫入本地文件
path='f:/test/'#把圖片存放到f盤下的test文件夾中
for index, item in enumerate(result):with urlopen(str(item)) as fp:with open(path+str(index)+'.png','wb') as fp1: fp1.write(fp.read())

例2、使用scrapy框架編寫爬蟲程序。

首先安裝scrapy,打開cmd運行pip install scrapy
若出錯:attrs() got an unexpected keyword argument ‘eq’
則運行:pip3 install attrs==19.2.0 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com即可

運行cmd開始創建項目,根據指定位置可以切換路徑
創建一個項目:scrapy startproject sqsq為項目名可隨意
cd sq
在這里插入圖片描述
在這里插入圖片描述
出現這樣表示scrapy框架已經搭建成功

例3、使用scrapy框架編寫爬蟲程序,爬取天涯小說。

這里以例2為基礎繼續
scrapy genspider xiaoshuosq bbs.tianya.cn/post-16-1126849-1.shtml
xiaoshuosq為爬蟲名稱
bbs.tianya.cn/post-16-1126849-1.shtml為爬蟲起始位置,這里是天涯小說第一頁
在這里插入圖片描述
之后打開創建的xiaoshuosq爬蟲
在這里插入圖片描述
編寫如下代碼:

# -*- coding: utf-8 -*-
import scrapyclass XiaoshuosqSpider(scrapy.Spider):name = 'xiaoshuosq'#這里的是你創建的爬蟲名稱allowed_domains = ['http://bbs.tianya.cn/post-16-1126849-1.shtml']start_urls = ['http://bbs.tianya.cn/post-16-1126849-1.shtml/']def parse(self, response):content=[]for i in response.xpath('//div'):if i.xpath('@_hostid').extract()==['13357319']:for j in i.xpath('div//div'):c = j.xpath('text()').extract()g = lambda x:x.strip('\n\r\u3000').replace('<br>','\n').replace('|','')c = '\n'.join(map(g.c)).strip()content.append(c)with open('F:\result.txt','a+',enconding='utf8') as fp:fp.writelines(content)url=response.urld = url[url.rindex('-')+1:url.rindex('.')]u = 'http://bbs.tianya.cn/post-16-1126849-{0}.shtml'next_url = u.format(int(d)+1)try:yield scrapy.Request(url=next_url,callback=self.parse)except:pass

保存該爬蟲
然后scrapy crwal xiaoshuosq這里的xiaoshuosq是你創建的爬蟲名稱

例4、使用requests庫爬取微信公眾號“Python小屋”文章“Python使用集合實現素數篩選法”中的所有超鏈接。

# -*- coding: utf-8 -*-
"""
Created on Mon Jun  1 21:40:19 2020@author: 78708
"""#使用requests庫爬取微信公眾號“Python小屋”文章“Python使用集合實現素數篩選法”中的所有超鏈接
import requests
import re
url = 'https://mp.weixin.qq.com/s?__biz=MzI4MzM2MDgyMQ==&mid=2247486531&idx=1&sn=7eeb27a03e2ee8ab4152563bb110f248&chksm=eb8aa719dcfd2e0f7b1731cfd8aa74114d68facf1809d7cdb0601e3d3be8fb287cfc035002c6#rd'
r = requests.get(url)
print(r.status_code )      #響應狀態碼
#print(r.text[:300]  )      #查看網頁源代碼前300個字符
print('篩選法' in r.text  )
print(r.encoding )
links = re.findall(r'<a .*?href="(.+?)"', r.text)
#使用正則表達式查找所有超鏈接地址
for link in links:if link.startswith('http'):print(link)from bs4 import BeautifulSoup
soup = BeautifulSoup(r.content, 'lxml')
for link in soup.findAll('a'):  #使用BeautifulSoup查找超鏈接地址href = link.get('href')if href.startswith('http'):      #只輸出絕對地址print(href)

例5、讀取并下載指定的URL的圖片文件。

# -*- coding: utf-8 -*-
"""
Created on Mon Jun  1 21:39:44 2020@author: 78708
"""#讀取并下載指定的URL的圖片文件。import requests
picUrl = r'https://www.python.org/static/opengraph-icon-200x200.png'
r = requests.get(picUrl)
print(r.status_code)
with open('G:\TIM\圖片\wsq.png', 'wb') as fp:#G:\TIM\圖片\wsq.png 為保存路徑以及圖片名稱fp.write(r.content)                #把圖像數據寫入本地文件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379101.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379101.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379101.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WinCE驅動開發問題精華集錦(二)

轉自&#xff1a;http://hgh123.blog.163.com/blog/static/5980422120086183115543/ 感謝 我怎么能在PB左邊的定制平臺加進我的驅動呢&#xff1f; 兩種辦法&#xff1a; 1、在platform.bib或者project.bib的MODULES部分添加一條語句&#xff0c;例如&#xff1a; MyDriver.dll…

報錯Unable to resolve target android-5

報錯信息&#xff1a;Error:Unable to resolve target android-X&#xff08;X是一個數字&#xff09; 錯誤分析&#xff1a;這種錯誤一般大部分是SDK 版本不符所造成的&#xff0c;一般會在Ecplise工作空間導入項目時候出現此錯誤&#xff0c;一般提示&#xff1a;Error:Unabl…

matlab盒子分形維數_分形維數--matlab

一維曲線分形維數的matlab程序function DFractalDim(y,cellmax)%求輸入一維信號的計盒分形維數%y是一維信號%cellmax:方格子的最大邊長,可以取2的偶數次冪次(1,2,4,8...),取大于數據長度的偶數%D是y的計盒維數(一般情況下D>1),Dlim(log(N(e))/log(k/e)),if cellmaxerror(cel…

Java布爾類toString()方法及示例

Syntax: 句法&#xff1a; public String toString();public static String toString(boolean value);布爾類toString()方法 (Boolean class toString() method) toString() method is available in java.lang package. toString()方法在java.lang包中可用。 toString() metho…

pcm數據編碼成為aac格式文件(可以在酷狗播放)

pcm數據編碼成為aac格式文件&#xff08;可以在酷狗播放&#xff09; 關于其中的aac adts格式可以參考&#xff1a;AAC ADTS格式分析 main.c #include <stdio.h> #include <stdlib.h> #include <stdlib.h>#include <libavcodec/avcodec.h> #include …

Python---實驗九

1、使用標準庫urllib爬取“http://news.pdsu.edu.cn/info/1005/31269.htm”平頂山學院新聞網上的圖片&#xff0c;要求:保存到F盤pic目錄中&#xff0c;文件名稱命名規則為“本人姓名” “_圖片編號”&#xff0c;如姓名為張三的第一張圖片命名為“張三_1.jpg”。 from re imp…

Request.Url學習(轉)

原文地址&#xff1a;http://www.cnblogs.com/jame-peng1028/articles/1274207.html?login1#commentform 網址&#xff1a;http://localhost:1897/News/Press/Content.aspx/123?id1#tocRequest.ApplicationPath/Request.PhysicalPathD:\Projects\Solution\web\News\Press\Con…

32接上拉5v_51單片機P0口上拉電阻的選擇

作為I/O口輸出的時候時&#xff0c;輸出低電平為0 輸出高電平為高組態(并非5V&#xff0c;相當于懸空狀態&#xff0c;也就是說P0 口不能真正的輸出高電平)。給所接的負載提供電流&#xff0c;因此必須接(一電阻連接到VCC)&#xff0c;由電源通過這個上拉電阻給負載提供電流。P…

[轉載]FPGA/CPLD重要設計思想及工程應用(時序及同步設計)

來源&#xff1a;http://www.eetop.cn/blog/html/11/317611-13412.html 數字電路中,時鐘是整個電路最重要、最特殊的信號。 第一, 系統內大部分器件的動作都是在時鐘的跳變沿上進行, 這就要求時鐘信號時延差要非常小, 否則就可能造成時序邏輯狀態出錯. 第二, 時鐘信號通常是系統…

duration java_Java Duration類| ofMinutes()方法與示例

duration javaDuration Class of Minutes()方法 (Duration Class ofMinutes() method) ofMinutes() method is available in java.time package. ofMinutes()方法在java.time包中可用。 ofMinutes() method is used to represent the given minutes value in this Duration. of…

實驗五 圖形設計

每復制一個方法都要綁定Paint事件 一、創建Windows窗體應用程序&#xff0c;要求如下&#xff1a;&#xff08;源代碼運行界面&#xff0c;缺少任一項為0分&#xff0c;源代碼只需粘貼繪制圖形代碼所在的方法&#xff0c;不用粘貼太多&#xff09; 例如: &#xff08;1&…

yuv編碼成h264格式寫成文件

yuv編碼成h264格式寫成文件 &#xff08;使用ffmpeg 編碼yuv420p編碼成h264格式&#xff09; #include <stdio.h> #include <stdlib.h> #include <stdint.h>#include <libavcodec/avcodec.h> #include <libavutil/time.h> #include <libavut…

c++ stl隊列初始化_聲明,初始化和訪問向量| C ++ STL

c stl隊列初始化Here, we have to declare, initialize and access a vector in C STL. 在這里&#xff0c;我們必須聲明&#xff0c;初始化和訪問C STL中的向量。 向量聲明 (Vector declaration) Syntax: 句法&#xff1a; vector<data_type> vector_name;Since, vec…

ADO.NET與SQL Server數據庫的交互

7.3.1 使用SqlConnection對象連接數據庫 例如&#xff1a;建立與SQL Server數據庫的連接。 string connstring"Data Sourceservername;uidusername;pwdpassword;Initial Catalogdbname";SqlConnection connnew SqlConnection(connstring);conn.Open(); 例如&#xf…

nsis 修改exe執行權限

通過修改注冊表的方式&#xff0c;修改exe的執行權限。&#xff0c;以下例子是使用管理員運行。 ;添加admin權限 SectionWriteRegStr HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\spp.exe" "RUNASADMIN&qu…

linux ftp日志_linux學習筆記(一)——Linux分區和目錄結構

linux學習筆記&#xff08;一&#xff09;——Linux分區和目錄結構安裝Linux時&#xff0c;手動掛載分區的情況下&#xff0c;/ 和 swap 是必須要掛載的&#xff0c;其他/home、/boot 等可以根據需要自行掛載。一般來說&#xff0c;簡單的話&#xff0c;建議掛載三個分區&#…

C#通過VS連接MySQL數據庫實現增刪改查基本操作

創建一個數據庫wsq 里面有一張beyondyanyu表 表里面有id(int)、names(varchar)、count(int)、passwords(varchar) 數據可以自己添 1、導入MySQL引用&#xff0c;你需要從官網或者其他地方下載&#xff0c;私聊我也可以 using MySql.Data.MySqlClient; 2、創建MySqlConnection對…

使用ffmpeg的filter處理yuv數據包括split filter(分流)、crop filter(裁剪)、vflip filter(垂直向上的翻轉)、overlay filter(合成)

使用ffmpeg的filter處理yuv數據包括split filter(分流)、crop filter(裁剪)、vflip filter(垂直向上的翻轉)、overlay filter(合成) #include <stdio.h>#include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libavfilter/avfil…

vc++ 6.0 堆棧_在C ++中使用鏈接列表實現堆棧

vc 6.0 堆棧To implement a stack using a linked list, basically we need to implement the push() and pop() operations of a stack using linked list. 要使用鏈接列表實現堆棧 &#xff0c;基本上&#xff0c;我們需要使用鏈接列表實現堆棧的push()和pop()操作。 Exampl…

煙雨小書店

煙雨小書店演示視頻 源碼