python爬取百度域名注册_python爬取百度域名_python爬取百度搜索結果url匯總

寫了兩篇之后,我覺得關於爬蟲,重點還是分析過程

分析些什么呢:

1)首先明確自己要爬取的目標

比如這次我們需要爬取的是使用百度搜索之后所有出來的url結果

2)分析手動進行的獲取目標的過程,以便以程序實現

比如百度,我們先進行輸入關鍵詞搜索,然后百度反饋給我們搜索結果頁,我們再一個個進行點擊查詢

3)思考程序如何實現,並克服實現中的具體困難

那么我們就先按上面的步驟來,我們首先認識到所搜引擎,提供一個搜索框,讓用戶進行輸入,然后點擊執行

我們可以先模擬進行搜索,發現點擊搜索之后的完整url中有一項很關鍵,如下

http://www.baidu.com/s?wd=搜索內容......

后面的內容我們嘗試去除之后再次請求上面的url,發現返回的信息一樣,我們就可以斷定請求的url只需要填入wd這個參數即可

接着我們就應該進行嘗試requests.get()查看是否能正常返回頁面,防止百度的反爬蟲

嘿,幸運的是返回頁面正常哈哈~

(當然如果沒有返回到正常信息,只要設置好headers或者嚴格的cookies就行了)

importrequests

url= 'http://www.baidu.com/s?wd=......'r=requests.get(url)print r.status_code,r.content

好,接下來我們就想知道怎么爬取所有的結果

我么再次對url進行分析,發現url中還有一項很關鍵,是控制頁碼的項:

http://www.baidu.com/s?wd=...&pn=x

這個x是每10為一頁,第一頁為0,而且一共76頁,也就是750最大值,大於750則返回第一頁

接下來我們就可以對抓取到的頁面進行分析

還是使用友好的beautifulsoup

我們通過分析發現我們所需要的url在標簽a中的href里,而且格式是這樣:

http://www.baidu.com/link?url=......

因為還存在很多別的url混淆,所以我們只需要進行一個篩選就行了

而且這個獲得的url並不是我們想要的url結果,這只是百度的一個跳轉鏈接

但是讓我欣慰的是,當我們隊這個跳轉鏈接進行get請求后,直接返回get對象的url便是我們想要的結果鏈接了

然后我們再次進行嘗試,發現還是沒有別的反爬蟲機制哈哈

本來的想法是,我們是否要先進行一個對新的url返回的狀態碼進行一個篩選,不是200就不行(甚至還需要些headers)

但是我發現,其實就算不是200,我們只要返回請求對象的url就行了,和能不能正常返回沒關系

因為我們的目的並不是請求的頁面結果,而是請求的url

所以只需要全部打印出來就行了

當然我建議寫一個簡單的籠統的headers寫入get,這樣至少能排除一些不必要的結果

接着我們請求的完整思路就差不多了

上代碼:

#coding=utf-8

importrequestsimportsysimportQueueimportthreadingfrom bs4 importBeautifulSoup as bsimportre

headers={

......

}classbaiduSpider(threading.Thread):def __init__(self,queue,name):

threading.Thread.__init__(self)

self._queue=queue

self._name=namedefrun(self):while notself._queue.empty():

url=self._queue.get()try:

self.get_url(url)exceptException,e:printepass

#一定要異常處理!!!不然中途會停下,爬取的內容就不完整了!!!

defget_url(self,url):

r= requests.get(url = url,headers =headers)

soup= bs(r.content,"html.parser")

urls= soup.find_all(name='a',attrs={'href':re.compile(('.'))})#for i in urls:#print i

#抓取百度搜索結果中的a標簽,其中href是包含了百度的跳轉地址

for i inurls:if 'www.baidu.com/link?url=' in i['href']:

a= requests.get(url = i['href'],headers =headers)#對跳轉地址進行一次訪問,返回訪問的url就能得到我們需要抓取的url結果了

#if a.status_code == 200:

#print a.url

with open('E:/url/'+self._name+'.txt') as f:if a.url not inf.read():

f= open('E:/url/'+self._name+'.txt','a')

f.write(a.url+'\n')

f.close()defmain(keyword):

name=keyword

f= open('E:/url/'+name+'.txt','w')

f.close()

queue=Queue.Queue()for i in range(0,760,10):

queue.put('http://www.baidu.com/s?wd=%s&pn=%s'%(keyword,str(i)))

threads=[]

thread_count= 10

for i inrange(thread_count):

spider=baiduSpider(queue,name)

threads.append(spider)for i inthreads:

i.start()for i inthreads:

i.join()print "It's down,sir!"

if __name__ == '__main__':if len(sys.argv) != 2:print 'no keyword'

print 'Please enter keyword'sys.exit(-1)else:

main(sys.argv[1])

我們工具的功能就是:

python 123.py keyword

就能將url結果寫入文件

這邊sys我有話講

在if __name__ == '__main__':中先進行一個判斷,如果輸入的字段是一個,那么我們就返回提醒信息,讓用戶進行鍵入

如果是兩個,那么就將第二個鍵入記為keyword進行操作

當然這邊邏輯有個缺陷,就是大於兩個字符會不會有別的問題(別的問題哦!!!)

值得研究一下,但這不是我們這篇的重點

好啦,今天的百度url結果手收集就那么多啦!

謝謝觀看哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python自动生成表格_Python自动整理 Excel 表格

相信有不少朋友日常工作会用到 Excel 处理各式表格文件,更有甚者可能要花大把时间来做繁琐耗时的表格整理工作。最近有朋友问可否编程来减轻表格整理工作量,今儿我们就通过实例来实现 Python 对表格的自动化整理。 首先我们有这么一份数据表 source.csv&…

flag的具体用法python_Python Qt.WindowFlags方法代码示例

# 需要导入模块: from PyQt5.QtCore import Qt [as 别名]# 或者: from PyQt5.QtCore.Qt import WindowFlags [as 别名]def updatePreview(self):flags Qt.WindowFlags()if self.windowRadioButton.isChecked():flags Qt.Windowelif self.dialogRadioButton.isChecked():flags…

graphpad prism画折线图_如何用Graphpad Prism 8作折线图

如何用Graphpad Prism 8作折线图如何用Graphpad Prism 8作折线图Prism 8 有8种数据类型,Prism数据表的格式决定可制作的图表种类和可执行的分析类型。选择一个数据表格式可以使Prism创建合适数据的数据表,然后创建所需的图形,执行适当的分析。…

sqlserver可视化工具_数据分析之基础分析工具篇(修订版)

原创:海峰996已经火了,你正在经历996吗,怎样才能避免,而又能在职场立足,工作效率是关键,那么先从选对工具开始吧。进入数据时代,大家都会进行或多或少的数据分析,那么现在的你正在使…

python中日期和时间格式化输出的方法小结_python中日期和时间格式化输出的方法小结...

本文实例总结了python中日期和时间格式化输出的方法。分享给大家供大家参考。具体分析如下:python格式化日期时间的函数为datetime.datetime.strftime();由字符串转为日期型的函数为:datetime.datetime.strptime(),两个函数都涉及…

java断点续传 http_http断点续传简单实现(java)

[月影读书频道 http://wf66.com/]fileSplitterFetch.splitterStop();}}//负责部分文件的抓取**FileSplitterFetch.java*/package NetFox;import java.io.*;import java.net.*;public class FileSplitterFetch extends Thread {String sURL; //File URLlong nStartPos; //File S…

windows下python环境搭建_Linux/Windows下Python环境搭建步骤

Python环境搭建首先到官网(www.python.org)下载相应的安装版本。主要分为Windows和Linux两种: 一、Linux下Python环境搭建 一般情况下,Linux系统都已经预安装好Python,但是版本都比较低,需要安装新的版本方…

oracle 同一列数据不同条件分组求和_艾瑞教育:有关Oracle数据库,你需要知道的几件事...

Oracle一、Oracle数据库在存储过程中,如何在字符串中使用变量?例:select to_char(sysdate,yyyymmdd) into v_yyyymmdd from dual;execute immediate(create table tableName_bk_ || v_yyyymmdd || as select * from TableName);将B表中符合关联条件的A…

java 对象流传输socket_Java Socket(二)使用TCP传输对象

在Java Socket使用TCP的基础上,通过ObjectInputStream和ObjectOutputStream来读写对象。//传输的对象,需要序列化package socket;import java.io.Serializable;public class MsgTO implements Serializable{private static final long serialVersionUID …

python量化策略源码_[Python源码] 十大经典日内策略之空中花园(附源码分享)

function kzhy(freq)% targetList traderGetTargetList(); %获取目标资产信息 HandleList traderGetHandleList(); %获取账户句柄 global upline; global dnline; if isempty(upline)||isempty(dnline) uplinezeros(length(targetList),1);%记录今天通道的上轨 dnlinezeros(l…

网络多人游戏架构与编程 电子书_Java互联网架构-高性能网络编程必备技能IO与NIO阻塞分析...

欢迎关注头条号:java小马哥周一至周日早九点半!下午三点半!精品技术文章准时送上!!!精品学习资料获取通道,参见文末一、概念NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同…

java 接口文件夹_Java NIO.2 使用Path接口来监听文件、文件夹变化

Java7对NIO进行了大的改进,新增了许多功能:•对文件系统的访问提供了全面的支持•提供了基于异步Channel的IO这些新增的IO功能简称为 NIO.2,依然在java.nio包下。早期的Java只提供了File类来操作文件、文件夹本身,功能有限&#x…

python能制作游戏吗_没有Python不能做的游戏,这些游戏都可以做

简介:Python编程语言的强大,几乎是众所周知的!那么,下面我给大家介绍一下几个用Python实现的各种游戏吧。不仅能用来做web、爬虫、数据分析等,没想到还能用做这么多的游戏,实在令人惊讶不已。注意:以下介绍…

vba excel 退出编辑状态_偷梁换柱之EXCEL编辑保护和VBA隐藏代码保护的解锁

如何解锁EXCEL表格编辑保护和VBA隐藏代码保护?当我们想借用别人的表格发现表格上锁无法编辑又不知道密码时或者当我们用软件生成一些表格时往往会遇到“上锁”问题,导致我们无法对表格进行改动。类似下图这样:那怎么才能征服她呢?…

java使用的页面静态化技术_java秒杀系列(2)- 页面静态化技术

###前言通过代码片段分别介绍服务端渲染、客户端渲染、对象缓存三种方式的写法。代码片段仅供参考,具体实现需要根据业务场景自行适配,但思想都是一样。一、服务端渲染方式####1、接口返回html页面的设置javaAutowiredThymeleafViewResolver thymeleafVi…

activex for chrome扩展程序 下载”_Chrome扩展程序一键生成网页骨架屏

对于依赖接口渲染的页面,在拿到数据之前页面往往是空白的,为了提示用户当前正在加载中,往往会使用进度条、loading图标或骨架屏的方式。对于前两种方案而言,实现比较简单;本文主要研究骨架屏的应用及实现,并…

python定时器 循环_python从写定时器学习Thread

python从写定时器学习Threadpython 如何写一个定时器,循环定时做某一操作呢?Timer 对象from threading import Timerdef hello():print "hello, world"t Timer(10.0, hello)t.start()10秒后输出:hello, world重点研究 t Timer(10…

java创建链表成绩管理系统_成绩管理系统 链表版

1.[代码][C/C]代码/**********************************************************程序描述:学生成绩管理系统*运行环境:Windows 7 SP1 X64*开发环境:CodeBlocks with Win7*作者:耗子、*时间:2015.03******************…

dynamo python修改多个参数_python之函数

a.sort()没有返回值。而sorted(a)是有返回值的。Python的标准比较运算符&#xff1a;<、<、 > 、>、 、 !函数用法和底层分析&#xff1a;函数是一个可重用的程序代码块&#xff0c;函数也代表一个任务和功能&#xff08;function&#xff09;,是代码复用的通用机制…

python开发基础戴歆第四章_第一阶段:Python开发基础 day04 课后练习

第一阶段&#xff1a;Python开发基础 day04 课后作业1.简述python的五大数据类型的作用、定义方式、使用方法数字类型字符串类型列表字典布尔型答&#xff1a;数字类型分为整型(int)和浮点型(float)&#xff1a;整型的作用&#xff1a;表示人的年龄、各种号码、级别等定义方式&…