下载资源后端资源详情
88.zip
大小:2.03MB
价格:28积分
下载量:0
评分:
5.0
上传者:2301_80488214
更新日期:2024-07-30

Python入门网络爬虫之精华版

资源文件列表(大概)

文件名
大小
88/
-
88/Captcha1/
-
88/Captcha1/!Test.bat
50B
88/Captcha1/ReadMe.md
1.31KB
88/Captcha1/convert.exe
198KB
88/Captcha1/pic/
-
88/Captcha1/pic/fnord.tif
1.38KB
88/Captcha1/pic/get_price_img.png
2.76KB
88/Captcha1/pic/get_price_img1.png
2.9KB
88/Captcha1/pic/get_price_img1_binary.png
352B
88/Captcha1/pic/get_price_img2.png
2.8KB
88/Captcha1/pic/get_price_img2_binary.png
352B
88/Captcha1/pic/get_price_img_binary.png
355B
88/Captcha1/pic/get_random.jpg
17.23KB
88/Captcha1/pic/get_random1.jpg
17.23KB
88/Captcha1/pic/get_random1_binary.png
684B
88/Captcha1/pic/get_random1_binary_midu.png
408B
88/Captcha1/pic/get_random1_binary_midu_pro1.png
371B
88/Captcha1/pic/get_random2.jpg
17.23KB
88/Captcha1/pic/get_random2_binary.png
675B
88/Captcha1/pic/get_random2_binary_midu.png
429B
88/Captcha1/pic/get_random2_binary_midu_pro1.png
377B
88/Captcha1/pic/get_random_binary.png
701B
88/Captcha1/pic/get_random_binary_midu.png
396B
88/Captcha1/pic/get_random_binary_midu_pro1.png
351B
88/Captcha1/pytesser_pro/
-
88/Captcha1/pytesser_pro/__init__.py
-
88/Captcha1/pytesser_pro/errors.py
424B
88/Captcha1/pytesser_pro/pytesser_pro.py
2.69KB
88/Captcha1/pytesser_pro/util.py
669B
88/Captcha1/tess_test.py
6.99KB
88/Captcha1/tesseract.exe
1.9MB
88/NewsSpider/
-
88/NewsSpider/NewsSpider.py
2.08KB
88/NewsSpider/ReadMe.md
316B
88/QunarSpider/
-
88/QunarSpider/QunarSpider.py
4.78KB
88/QunarSpider/ReadMe.md
279B
88/ReadMe.md
12.19KB
88/Spider_Java/
-
88/Spider_Java/README.md
141B
88/Spider_Java/Spider_Java1/
-
88/Spider_Java/Spider_Java1/.classpath
300B
88/Spider_Java/Spider_Java1/.project
365B
88/Spider_Java/Spider_Java1/bin/
-
88/Spider_Java/Spider_Java1/bin/synchronizetest/
-
88/Spider_Java/Spider_Java1/bin/synchronizetest/Booth.class
1.58KB
88/Spider_Java/Spider_Java1/bin/synchronizetest/Reservoir.class
476B
88/Spider_Java/Spider_Java1/bin/synchronizetest/Test.class
674B
88/Spider_Java/Spider_Java1/bin/wallstreetcnsave/
-
88/Spider_Java/Spider_Java1/bin/wallstreetcnsave/WallstreetcnSaveTest.class
9.31KB
88/Spider_Java/Spider_Java1/lib/
-
88/Spider_Java/Spider_Java1/lib/mongo-java-driver-2.13.0-rc1.jar
590.21KB
88/Spider_Java/Spider_Java1/src/
-
88/Spider_Java/Spider_Java1/src/synchronizetest/
-
88/Spider_Java/Spider_Java1/src/synchronizetest/Test.java
1.7KB
88/Spider_Java/Spider_Java1/src/wallstreetcnsave/
-
88/Spider_Java/Spider_Java1/src/wallstreetcnsave/WallstreetcnSaveTest.java
7.2KB
88/Spider_Java/Spider_Java2/
-
88/Spider_Java/Spider_Java2/.classpath
300B
88/Spider_Java/Spider_Java2/.project
382B
88/Spider_Java/Spider_Java2/bin/
-
88/Spider_Java/Spider_Java2/bin/synchronizetest/
-
88/Spider_Java/Spider_Java2/bin/synchronizetest/Booth.class
1.58KB
88/Spider_Java/Spider_Java2/bin/synchronizetest/Reservoir.class
476B
88/Spider_Java/Spider_Java2/bin/synchronizetest/Test.class
674B
88/Spider_Java/Spider_Java2/bin/wallstreetcnsave/
-
88/Spider_Java/Spider_Java2/bin/wallstreetcnsave/GetrequestUrl.class
1.04KB
88/Spider_Java/Spider_Java2/bin/wallstreetcnsave/WallstreetcnSave.class
9.95KB
88/Spider_Java/Spider_Java2/bin/wallstreetcnsave/WallstreetcnSaveTest.class
893B
88/Spider_Java/Spider_Java2/lib/
-
88/Spider_Java/Spider_Java2/lib/mongo-java-driver-2.13.0-rc1.jar
590.21KB
88/Spider_Java/Spider_Java2/src/
-
88/Spider_Java/Spider_Java2/src/synchronizetest/
-
88/Spider_Java/Spider_Java2/src/synchronizetest/Test.java
1.78KB
88/Spider_Java/Spider_Java2/src/wallstreetcnsave/
-
88/Spider_Java/Spider_Java2/src/wallstreetcnsave/WallstreetcnSaveTest.java
10.38KB
88/Spider_Python/
-
88/Spider_Python/README.md
100B
88/Spider_Python/WallstreetcnSaveTest.py
5.53KB
88/WechatSearchProjects/
-
88/WechatSearchProjects/README.md
326B
88/WechatSearchProjects/Spider_Main.py
775B
88/WechatSearchProjects/WechatSearchTest.py
3.72KB
88/WechatSearchProjects/Wechatproject/
-
88/WechatSearchProjects/Wechatproject/Wechatproject/
-
88/WechatSearchProjects/Wechatproject/Wechatproject/__init__.py
-
88/WechatSearchProjects/Wechatproject/Wechatproject/items.py
335B
88/WechatSearchProjects/Wechatproject/Wechatproject/pipelines.py
3.55KB
88/WechatSearchProjects/Wechatproject/Wechatproject/settings.py
868B
88/WechatSearchProjects/Wechatproject/Wechatproject/spiders/
-
88/WechatSearchProjects/Wechatproject/Wechatproject/spiders/__init__.py
161B
88/WechatSearchProjects/Wechatproject/Wechatproject/spiders/spider.py
3.07KB
88/WechatSearchProjects/Wechatproject/scrapy.cfg
268B
88/ZhihuSpider/
-
88/ZhihuSpider/ReadMe.md
481B
88/ZhihuSpider/ZhihuSpider.py
2.1KB
88/ZhihuSpider/config.ini
153B

资源内容介绍

Python学习网络爬虫主要分3个大的版块:抓取,分析,存储简单来说这段过程发生了以下四个步骤:查找域名对应的IP地址。向IP对应的服务器发送请求。服务器响应请求,发回网页内容。浏览器解析网页内容。网络爬虫要做的,简单来说,就是实现浏览器的功能。通过指定url,直接返回给用户所需要的数据,而不需要一步步人工去操纵浏览器获取。
# [Python入门网络爬虫之精华版](https://github.com/lining0806/PythonSpiderNotes)*** Python学习网络爬虫主要分3个大的版块:**抓取**,**分析**,**存储** 另外,比较常用的爬虫框架[Scrapy](http://scrapy.org/),这里最后也详细介绍一下。 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:[宁哥的小站-网络爬虫](http://www.lining0806.com/category/spider/) ***当我们在浏览器中输入一个url后回车,后台会发生什么?比如说你输入[http://www.lining0806.com/](http://www.lining0806.com/),你就会看到宁哥的小站首页。简单来说这段过程发生了以下四个步骤:* 查找域名对应的IP地址。* 向IP对应的服务器发送请求。* 服务器响应请求,发回网页内容。* 浏览器解析网页内容。网络爬虫要做的,简单来说,就是实现浏览器的功能。通过指定url,直接返回给用户所需要的数据,而不需要一步步人工去操纵浏览器获取。## 抓取 这一步,你要明确要得到的内容是什么?是HTML源码,还是Json格式的字符串等。 #### 1. 最基本的抓取 抓取大多数情况属于get请求,即直接从对方服务器上获取数据。 首先,Python中自带urllib及urllib2这两个模块,基本上能满足一般的页面抓取。另外,[requests](https://github.com/kennethreitz/requests)也是非常有用的包,与此类似的,还有[httplib2](https://github.com/jcgregorio/httplib2)等等。 ```Requests:import requestsresponse = requests.get(url)content = requests.get(url).contentprint "response headers:", response.headersprint "content:", contentUrllib2:import urllib2response = urllib2.urlopen(url)content = urllib2.urlopen(url).read()print "response headers:", response.headersprint "content:", contentHttplib2:import httplib2http = httplib2.Http()response_headers, content = http.request(url, 'GET')print "response headers:", response_headersprint "content:", content``` 此外,对于带有查询字段的url,get请求一般会将来请求的数据附在url之后,以?分割url和传输数据,多个参数用&连接。 ```data = {'data1':'XXXXX', 'data2':'XXXXX'}Requests:data为dict,jsonimport requestsresponse = requests.get(url=url, params=data)Urllib2:data为stringimport urllib, urllib2 data = urllib.urlencode(data)full_url = url+'?'+dataresponse = urllib2.urlopen(full_url)```相关参考:[网易新闻排行榜抓取回顾](http://www.lining0806.com/%E7%BD%91%E6%98%93%E6%96%B0%E9%97%BB%E6%8E%92%E8%A1%8C%E6%A6%9C%E6%8A%93%E5%8F%96%E5%9B%9E%E9%A1%BE/)参考项目:[网络爬虫之最基本的爬虫:爬取网易新闻排行榜](https://github.com/lining0806/PythonSpiderNotes/blob/master/NewsSpider)### 2. 对于登陆情况的处理 **2.1 使用表单登陆** 这种情况属于post请求,即先向服务器发送表单数据,服务器再将返回的cookie存入本地。 ```data = {'data1':'XXXXX', 'data2':'XXXXX'}Requests:data为dict,jsonimport requestsresponse = requests.post(url=url, data=data)Urllib2:data为stringimport urllib, urllib2 data = urllib.urlencode(data)req = urllib2.Request(url=url, data=data)response = urllib2.urlopen(req)``` **2.2 使用cookie登陆** 使用cookie登陆,服务器会认为你是一个已登陆的用户,所以就会返回给你一个已登陆的内容。因此,需要验证码的情况可以使用带验证码登陆的cookie解决。 ```import requestsrequests_session = requests.session() response = requests_session.post(url=url_login, data=data) ```若存在验证码,此时采用response = requests_session.post(url=url_login, data=data)是不行的,做法应该如下: ```response_captcha = requests_session.get(url=url_login, cookies=cookies)response1 = requests.get(url_login) # 未登陆response2 = requests_session.get(url_login) # 已登陆,因为之前拿到了Response Cookie!response3 = requests_session.get(url_results) # 已登陆,因为之前拿到了Response Cookie!```相关参考:[网络爬虫-验证码登陆](http://www.lining0806.com/6-%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB-%E9%AA%8C%E8%AF%81%E7%A0%81%E7%99%BB%E9%99%86/) 参考项目:[网络爬虫之用户名密码及验证码登陆:爬取知乎网站](https://github.com/lining0806/PythonSpiderNotes/blob/master/ZhihuSpider) ### 3. 对于反爬虫机制的处理 **3.1 使用代理** 适用情况:限制IP地址情况,也可解决由于“频繁点击”而需要输入验证码登陆的情况。 这种情况最好的办法就是维护一个代理IP池,网上有很多免费的代理IP,良莠不齐,可以通过筛选找到能用的。对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。```proxies = {'http':'http://XX.XX.XX.XX:XXXX'}Requests:import requestsresponse = requests.get(url=url, proxies=proxies)Urllib2:import urllib2proxy_support = urllib2.ProxyHandler(proxies)opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)urllib2.install_opener(opener) # 安装opener,此后调用urlopen()时都会使用安装过的opener对象response = urllib2.urlopen(url)```**3.2 时间设置** 适用情况:限制频率情况。 Requests,Urllib2都可以使用time库的sleep()函数:```import timetime.sleep(1)```**3.3 伪装成浏览器,或者反“反盗链”** 有些网站会检查你是不是真的浏览器访问,还是机器自动访问的。这种情况,加上User-Agent,表明你是浏览器访问即可。有时还会检查是否带Referer信息还会检查你的Referer是否合法,一般再加上Referer。```headers = {'User-Agent':'XXXXX'} # 伪装成浏览器访问,适用于拒绝爬虫的网站headers = {'Referer':'XXXXX'}headers = {'User-Agent':'XXXXX', 'Referer':'XXXXX'}Requests:response = requests.get(url=url, headers=headers)Urllib2:import urllib, urllib2 req = urllib2.Request(url=url, headers=headers)response = urllib2.urlopen(req)```### 4. 对于断线重连 不多说。```def multi_session(session, *arg):retryTimes = 20while retryTimes>0:try:return session.post(*arg)except:print '.',retryTimes -= 1```或者 ```def multi_open(opener, *arg):retryTimes = 20while retryTimes>0:try:return opener.open(*arg)except:print '.',retryTimes -= 1```这样我们就可以使用multi_session或multi_open对爬虫抓取的session或opener进行保持。 ### 5. 多进程抓取 这里针对[华尔街见闻](http://live.wallstreetcn.com/ )进行并行抓取的实验对比:[Python多进程抓取](https://github.com/lining0806/PythonSpiderNotes/blob/master/Spider_Python) 与 [Java单线程和多线程抓取](https://github.com/lining0806/PythonSpiderNotes/blob/master/Spider_Java) 相关参考:[关于Python和Java的多进程多线程计算方法对比](http://www.lining0806.com/%E5%85%B3%E4%BA%8Epython%E5%92%8Cjava%E7%9A%84%E5%A4%9A%E8%BF%9B%E7%A8%8B%E5%A4%9A%E7%BA%BF%E7%A8%8B%E8%AE%A1%E7%AE%97%E6%96%B9%E6%B3%95%E5%AF%B9%E6%AF%94/) ### 6. 对于Ajax请求的处理 对于“加载更多”情况,使用Ajax来传输很多数据。它的工作原理是:从网页的url加载网页的源代码之后,会在浏览器里执行JavaScript程序。这些程序会加载更多的内容,“填充”到网页里。这就是为什么如果你直接去爬网页本身的url,你会找不到页面的实际内容。 这里,若使用Google Chrome分析”请求“对应的链接(方法:右键→审查元素→Network→清空,点击”加载更多“,出现对应的GET链接寻找Type为text/html的,点击,查看get参数或者复制Request URL),循环过程。 * �

用户评论 (0)

发表评论

captcha

相关资源

智能车仿真软件racecar-master

bug汇总报错controllers相关sudo apt-get install ros-kinetic-controller-managersudo apt-get install ros-kinetic-gazebo-ros-controlsudo apt-get install ros-kinetic-effort-controllerssudo apt-get install ros-kinetic-joint-state-controller报错driver_base相关sudo apt-get install ros-kinetic-driver-base报错rtabmap相关sudo apt-get install ros-kinetic-rtabmap-ros报错ackermann_msgs相关sudo apt-get install ros-kinetic-ackermann-msgs报错findline.cpp找不到opencv头文件执行:locate OpenCVConfig.cmake得到你的opencv的路径

6.05MB11积分

ACM-ICPC 备战指南

先决条件:了解至少一种编程语言。(你必须能够有效地使用该语言。)这个知识库的理念是将结构良好的内容分成几个部分,这样即使很忙也可以跟上。在这里,我们收集了我们认为可以很好地学习所提主题的资源。课程有不同的数据结构和算法。预计一周所需时间为6-7小时。(在规定时间内完成课程)基本使用指南: 使用此存储库取决于用户想要用它做什么。我们为那些想要在继续​​学习的同时慢慢掌握主题知识的人提供以下建议:根据个人喜好,查看针对特定主题提供的书面或视频资源。查看尽可能多的资源,以更好地理解该主题。不检查源代码,尝试自己复制算法或数据结构。当遇到困难或完成时,请查看提供的源代码,并将其与您的代码进行比较,以查看可能的错误。尝试修复它。当您对代码感到满意后,尝试解决给定的问题。当您完成解决问题或在某个时候遇到困难时,请检查给出的解决方案并尝试理解您的错误或查看是否存在更好的方法。

1.68MB34积分

Objective-C 的模拟对象

使用 OCMock – 简短版本为实例和类方法创建存根模拟对象代表真实对象。使用存根,我们可以指定调用方法时要返回的内容:// create a mock for the user defaultsid userDefaultsMock = OCMClassMock([NSUserDefaults class]);// set it up to return a specific value when stringForKey: is calledOCMStub([userDefaultsMock stringForKey:@"MyAppURLKey"]).andReturn(@"http://testurl");// set it up to return the specified value no matter how the method is invokedOCMStub([userDefaultsMock stringForKey:[OCMArg any]]).andReturn(@"http://testurl");

2.68MB10积分

Docker 官方镜像打包 PHP

简短版本:“简单标签”通常是一个单一平台(Windows 与 Linux),而“共享标签”是多个平台的组合(因此根据它们运行的​​平台可能会有很大不同的界面/行为,但总体上应该代表大致相同的东西)。Dockerfile一些图像在“支持的标签和相应的链接”下分离了“简单标签”和“共享标签”部分。“简单标记”是“单个”Linux 或 Windows 映像的实例。它通常是一个清单列表,可以包含为其他体系结构构建的相同映像;例如,mongo:4.0-xenial目前有amd64和 的映像arm64v8。Docker 守护程序负责为主机体系结构选择合适的映像。“共享标签”是始终指向清单列表的标签,该清单列表包括所有各自映像架构中 Windows 和 Linux 映像的潜在多个版本的组合 - 在示例中mongo,4.0标签是一个共享标签,由(在撰写本文时)所有4.0-xenial、4.0-windowsservercore-ltsc2016、4.0-windowsservercore-1709和组成4.0-windowsservercore-1803。

723.51KB50积分