脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - PyHacker编写URL批量采集器

PyHacker编写URL批量采集器

2023-01-27 13:15巡安似海 Python

这篇文章主要为大家介绍了SpringBoot整合VUE EasyExcel实现数据导入导出,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

喜欢用Python写脚本的小伙伴可以跟着一起写一写呀。

编写环境:Python2.x

00x1:需要用到的模块

需要用到的模块如下:

import requests
import 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

PyHacker编写URL批量采集器

Ok,没毛病

 

00x3:分析需要采集的url

分析需要采集的url在哪个位置

PyHacker编写URL批量采集器

得出正则:(.*?)

正则表达式学习:(百度搜:python 正则表达式)

def reurl():
  urlr = r'<cite>(.*?)</cite>'
  reurl = re.findall(urlr,html)
  print reurl

PyHacker编写URL批量采集器

就在我请求第二页的时候发现了问题

PyHacker编写URL批量采集器

可以看到请求内容和第一页一样,有某种验证机制

一般情况下验证机制,表示特定参数

经过多次测试,发现缺少 Cookie: _EDGE_V=1;

PyHacker编写URL批量采集器

PyHacker编写URL批量采集器

请求正常,大致已经完成

接下来只需要给关键词和页数变量就ok了

 

00x4:搜索

再搜索site:baidu.com 又出现了问题

PyHacker编写URL批量采集器

于是修改正则为:

'target="_blank" href="(http.*?\..*?\..*?)" h="'

PyHacker编写URL批量采集器

有很多我们不想要的结果,我们再来遍历下采集的urls

做一下处理

正则为:

(http[s]?://.*?)/

代码为:

def url():
  for url in urls:
      urlr = r'(http[s]?://.*?)/'
      url = re.findall(urlr,url)
      print url

PyHacker编写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)

PyHacker编写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批量采集器的详细内容,更多关于PyHacker批量采集URL的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/look-word/p/16269739.html

延伸 · 阅读

精彩推荐