标签:sd卡 鼠标 序列化 开启 mon item shell 验证 red
爬虫基本包含 爬虫调度器,URL管理器(已爬与待爬),HTML下载器(获取网络信息),HTML解析器,数据存储器五个部分。
了解网站基本特点,设计相应的爬取方案
探测反爬措施,设计对应反反爬方式
User-agent
: 指定对哪些爬虫生效Disallow
: 指定不允许访问的网址Allow
: 指定允许访问的网址builtwith
),了解内容大概以什么形式加载site:XXX
搜索相应网站目录下的返回结果数量)Referer
与Host
)
//定位根节点位置,/向下寻找,/text()获取文本信息,/@XXX选择元素
导入模块From lxml import etree后使用Selector = etree.HTML(XXX) 转换成xpath识别的文本类型。在使用content = selector.xpath(‘//div[@id]/ul’)获取文本信息。
推荐使用lxml(解析速率比beautifulsoup快)
对经常分析的更新速率慢的网站建议进行网页缓存,以便于增加或调整需要提取的数据
分析同一URL的数据是否有不同,是否存在增量式爬取
数据库准备,推荐使用MongoDB 网页/数据去重
设计数据库结构
定位网页元素,提取目标数据 推荐使用lxml
分析网页中的动态内容(AJAX方式,GWT方式)
根据网站数据交互的URL,调整参数,以获得更多的信息
智能化解析工具
使用urlretrieve
函数实现多媒体文件抽取,并设置回调函数
import urllib
def schedule(blocknum, blocksize, totalsize):
per = 100.0 * blocknum * blocksize / totalsize
if per > 100:
per = 100
print("[+] Now get: %d" % per)
urllib.urlretrieve(img_url, filename, schedule)
使用集合set的方式进行内存去重,可以使用数据库去重,使用缓存数据库Redis去重,
可以在此基础上使用MD5处理URL取中间28位字符作为比对信息,可以将未爬取的已爬的信息序列化存储,保存信息以备后续使用。
增量爬取信息一定要掌握去重的工作!!!
requests.get(URL, procies={‘http‘: ‘http://IP.port‘}, ‘https‘: ‘http://IP.port‘})
个人使用,60-70个代理IP即可。爬取同一个网站下的网页,一般两次下载间间隔至少1s
celery 专用的信息传输工具
参考:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html
scrapy startproject tutorial 创建工程
scrapy.cfg: the project configuration file #是这个工程的根目录所在层
tutorial/: the project’s python module, you’ll later import your code from here.
tutorial/items.py: the project’s items file. # 定义要爬取存储的项
tutorial/pipelines.py: the project’s pipelines file.
tutorial/settings.py: the project’s settings file. #包含工程的基本设置信息
tutorial/spiders/: a directory where you’ll later put your spiders.
from scrapy.item import Item, Field 每个Item有多个Field对象
class DmozItem(Item):
title = Field()
scrapy genspider name <domain> 创建爬虫 爬虫的文件名不能与项目名字重合
#爬虫定义
from scrapy.spider import BaseSpider
name: identifies the Spider.
start_urls: is a list of URLs where the Spider will begin to crawl from.
? parse() is a method of the spider, which will be called with the downloaded Response object of each start URL. The response is passed to the method as the first and only argument.
scrapy crawl mininova -o scraped_data.json -t json 输出为json格式
scrapy crawl mininova -o teachers.csv 输出为csv格式
scrapy crawl mininova
爬虫运行前,关闭setting里面的robots协议 ROBOTSTXT_OBEY
需要存储时需要开启ITEM_PIPELINES
ITEM_PIPELINES = {
'test_taobao.pipelines.TestTaobaoPipeline': 300,
}
启动 DOWNLOADER_MIDDLEWARES 也是类似的,其后的数值是执行的先后顺序,从低到高
shell方式尝试 用于调试
scrapy shell "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"
从HTML或XML文件中提取数据的Python库
参考https://www.cnblogs.com/haiyan123/p/8317398.html
from bs4 import BeautifulSoup
soup=BeautifulSoup(html_doc,'lxml') #具有容错功能
soup.find_all(name="a")
soup.find_all(text="The Dormouse's story")) #按照文本来找
Chrome 给我们提供了一键获取 xpath 地址的方法(右键->检查->copy->copy xpath)
*
所有元素标签:sd卡 鼠标 序列化 开启 mon item shell 验证 red
原文地址:https://www.cnblogs.com/joeat1/p/11664140.html