【PyHacker编写指南】打造URL批量采集器
这节课是巡安似海PyHacker编写指南的《打造URL批量采集器》
喜欢用Python写脚本的小伙伴可以跟着一起写一写呀。
编写环境:Python2.x
00x1:
需要用到的模块如下:
import requestsimport re
本文将用re正则进行讲解,如果你用Xpath也可以
00x2:
首先我们要选取搜索引擎(其他搜索引擎原理相同)
以bing为例:Cn.bing.com
首先分析bing翻页机制:
https://cn.bing.com/search?q=内容&first=0 第一页https://cn.bing.com/search?q=内容&first=10 第二页https://cn.bing.com/search?q=内容&first=20 第三页
页数 = First*10
分析完毕,我们来请求看一下
def req():
url = 'https://cn.bing.com/search?q=小陈&first=0'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}
req = requests.get(url,headers=headers)
html = req.content
print html
Ok,没毛病
00x3:
分析需要采集的url在哪个位置
得出正则:(.*?)
正则表达式学习:(百度搜:python 正则表达式)
def reurl():
urlr = r'<cite>(.*?)</cite>'
reurl = re.findall(urlr,html)
print reurl
就在我请求第二页的时候发现了问题
可以看到请求内容和第一页一样,有某种验证机制
一般情况下验证机制,表示特定参数
经过多次测试,发现缺少 Cookie: _EDGE_V=1;
请求正常,大致已经完成
接下来只需要给关键词和页数变量就ok了
00x4:
再搜索site:baidu.com 又出现了问题
于是修改正则为:
'target="_blank" href="(http.*?\..*?\..*?)" h="'
有很多我们不想要的结果,我们再来遍历下采集的urls
做一下处理
正则为:
(http[s]?://.*?)/
代码为:
def url():
for url in urls:
urlr = r'(http[s]?://.*?)/'
url = re.findall(urlr,url)
print url
print url 改为 print url[0] 再进行处理一下
可以看到下面还有重复的url,对url去重一下
def qc():#去重复
for url in url_ok:
if url in url_bing:
continue
url_bing.append(url)
00x5:
接下来我们要让他自动保存到url_bing.txt
with open('url_bing.txt','a+')as f:
for url in url_bing:
print url
f.write(url+"\n")
print "Save as url_bing.txt"
00x6:
完整代码:
#!/usr/bin/python
#-*- coding:utf-8 -*-
import requests
import re urls = []
url_ok = []
url_bing=[] def req(q,first):
global html
url = 'https://cn.bing.com/search?q=%s&first=%s'%(q,first)
print url
headers = {
'Host':'cn.bing.com',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0',
'Cookie': '_EDGE_V=1;'
}
req = requests.get(url,headers=headers)
html = req.content def reurl():#正则匹配url
urlr = r'target="_blank" href="(http.*?\..*?\..*?)" h="'
reurl = re.findall(urlr,html)
for url in reurl:
if url not in urls:
urls.append(url) def url():#url二次处理
for url in urls:
urlr = r'(http[s]?://.*?)/'
url = re.findall(urlr,url)
url_ok.append(url[0]) def qc():#去重复
for url in url_ok:
if url in url_bing:
continue
url_bing.append(url) if __name__ == '__main__':
q = raw_input('\nkey:')
page = input('page:')
for first in range(0, page):
req(q, first * 10)
reurl()
url()
qc()
with open('url_bing.txt','a+')as f:
for url in url_bing:
print url
f.write(url+"\n")
print "Save as url_bing.txt"
喜欢的朋友们点个赞叭~
【PyHacker编写指南】打造URL批量采集器的更多相关文章
- 哔哩哔哩批量采集器(支持windows和mac)
链接:https://pan.baidu.com/s/1jW2ea0Cl1xL5xN9DuB8Fcw 密码:klyw
- WEB页面采集器编写经验之一:静态页面采集器
严格意义来说,采集器和爬虫不是一回事:采集器是对特定结构的数据来源进行解析.结构化,将所需的数据从中提取出来:而爬虫的主要目标更多的是页面里的链接和页面的TITLE. 采集器也写过不少了,随便写一点经 ...
- prometheus学习系列十一: Prometheus 采集器的编写
在前面的文章已经写了官方的几个exporter的使用了. 在实际使用环境中,我们可能需要收集一些自定义的数据, 这个时候我们一般是需要自己编写采集器的. 快速入门编写一个入门的demo 编写代码 fr ...
- PE解析器与加载器编写指南
PE解析器与加载器编写指南 最近准备去实习,看公司要求应该开发PE相关的查杀引擎,因此再回头复习一下PE格式,重新写一个PE解析器和PE加载器,再此记录下有关坑. PE解析器部分: 1)如何确定节区表 ...
- Hawk 3. 网页采集器
1.基本入门 1. 原理(建议阅读) 网页采集器的功能是获取网页中的数据(废话).通常来说,目标可能是列表(如购物车列表),或是一个页面中的固定字段(如JD某商品的价格和介绍,在页面中只有一个).因此 ...
- MP3文件信息批量更改器
以前(估计是2003年)编写一个MP3文件信息批量更改器MP3TagChanger,现放上来参考.(VB6编码) 使用方法很简单,会Winamp或者千千静听的就懂使用. http://pan.baid ...
- 淘宝IP地址库采集器c#代码
这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下. 最近做一个项目,功能类似于CNZZ站长统计功能,要求显示Ip所在的省份市区/提供商等信息.网上的Ip纯真数据库,下载下来一看 ...
- 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)
原文:基于Asterisk的VoIP开发指南--Asterisk 模块编写指南(1) 1 开源项目概述 Asterisk是一个开源的软件包,通常运行在Linux操作系统平台上.Asterisk可以用三 ...
- 火车头采集器对接织梦cms图集发布时, 采集网上图片超时的解决方法
背景介绍: 火车头采集器对接织梦cms图片集发布时, 对于多张(超过30张)大图片时, 经常会出现图集发布超时的情况. 问题分析: 因为php对于资源的处理有默认的超时时间30秒, 而我尝试了好多方 ...
随机推荐
- 【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维
问题描述 编写PowerShell脚本,以多维(3维)数组中第二维度的值进行过滤,并打印出结果 #三维数组源数据 "A", "11", "Cheng ...
- glusterfs架构和原理
分布式存储已经研究很多年,但直到近年来,伴随着谷歌.亚马逊和阿里等互联网公司云计算和大数据应用的兴起,它才大规模应用到工程实践中.如谷歌的分布式文件系统GFS.分布式表格系统google Bigtab ...
- 搞半天,全国34个省份包含湾湾\香港\澳门的高德poi兴趣点23类数据终于爬完事了
1.技术架构: python+阿里云数据库mongodb5.0+高德地图rest api 2.成本: 阿里云数据库mongodb5.0一个月话费1k多 2.遇到的问题 1)两个阿里云账号下 mongo ...
- python爬虫---表情包批量采集
代码: import requests from pyquery import PyQuery as pq # 比xpath还要灵活的html解析工具 # 定义请求 headers = { " ...
- 我试试这个昵称好使不队项目NABCD指路
我试试这个昵称好使不队项目NABCD指路:https://www.cnblogs.com/team-development/p/14617203.html
- java栈stack和堆heap的工作原理,用途及区别?举例说明
java堆和栈的区别[新手可忽略不影响继续学习] Java中内存分成两种:一种是栈stack,一种是堆heap.函数中的一些基本类型的变量(int, float)和对象的引用变量(reference) ...
- 在 Mac 上开发 .NET MAUI
.NET 多平台应用程序 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用程序,这些应用程序可以从单个共享代码库在 Android.iOS.macO ...
- AcWing 1220. 生命之树
题目链接 题目描述: 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集 S,使得对于 S 中的任 ...
- Coursera 学习笔记|Machine Learning by Standford University - 吴恩达
/ 20220404 Week 1 - 2 / Chapter 1 - Introduction 1.1 Definition Arthur Samuel The field of study tha ...
- Python raise...from... 是啥?
调试程序时看某些库的源代码,发现有如下代码读不懂,不理解后面这个from干什么用的. try: ... except KeyError: raise **Error('') from None try ...