用PyHacker实现URL批量采集器怎样做呢
Admin 2022-09-02 群英技术资讯 263 次浏览
需要用到的模块如下:
import requests import re
本文将用re正则进行讲解,如果你用Xpath也可以
首先我们要选取搜索引擎(其他搜索引擎原理相同)
以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,没毛病
分析需要采集的url在哪个位置
得出正则:(.*?)
正则表达式学习:(百度搜:python 正则表达式)
def reurl(): urlr = r'<cite>(.*?)</cite>' reurl = re.findall(urlr,html) print reurl
就在我请求第二页的时候发现了问题
可以看到请求内容和第一页一样,有某种验证机制
一般情况下验证机制,表示特定参数
经过多次测试,发现缺少 Cookie: _EDGE_V=1;
请求正常,大致已经完成
接下来只需要给关键词和页数变量就ok了
再搜索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)
接下来我们要让他自动保存到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"
#!/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"
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了Python实现五子棋人机对战 和人人对战,通过定义黑白子,落子位置以及获胜规则展开详细内容,需要的小伙伴可以参考一下
这篇文章主要介绍了python爬虫之生活常识解答机器人,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
这篇文章主要为大家介绍了Python Map 函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
这篇文章主要介绍了python 中defaultdict()对字典进行初始化,一般情况下,在使用字典时,先定义一个空字典(如dict_a = {}),然后往字典中添加元素只需要 dict_a[key] = value即可,本文通过实例代码介绍具体用法,需要的朋友可以参考下
9 月 10 日,张勇如期和蔡崇信完成阿里巴巴控股集团董事会主席的交接。但出人意料的是,他没有像 6 月说的 “专职担任阿里云智能集团董事长兼 CEO”,而是继续退出,以 “功勋阿里人” 的身份从阿里集团退休。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008