学习自:手把手教你用Python爬取百度搜索结果并保存 - 云+社区 - 腾讯云

如何利用python模拟百度搜索,Python交流,技术交流区,鱼C论坛

指定关键字,对其进行百度搜索,保存搜索结果,记录下搜索的内容和标题

思路:

首页:https://www.baidu.com/s?wd=* (将*替换为关键字即可)

其他页:https://www.baidu.com/s?wd=*&pn=n(n/10+1为实际的页)

1、利用关键字构建百度搜索的URL

2、爬虫爬取该URL

3、分析每个可选项的XPath,记录下可选项的名字与URL

4、注意到每一个搜索项的XPath为//*[@class="t"]/a,其名字就是该项的文本内容,而链接是该项的属性href

#每一个搜索项的XPath
//*[@class="t"]/a #每一项标题的XPath
. #就一个点 #每一项链接的XPath
./@href

5、提取标题后,需要对用正则表达式进行筛选,因为页面源代码中有<em>与</em>标签,所以需要用正则表达式将该标签删除。因此,这里不能直接用XPath函数text()提取,而应该用extract直接提取源代码,然后用正则表达式从中提取需要的要素

        eles=response.xpath('//*[@class="t"]/a') #提取搜索每一项
for ele in eles:
name=ele.xpath('.').extract() #提取标题相关的要素源码,extract方法返回一个List
name=''.join(name).strip() #要将List中的要素连接起来
name=name.replace('<em>','').replace('</em>', '')#删除其中的<em>与</em>标签
re_bd=re.compile(r'>(.*)</a>')#构建re compile
item['name']=re_bd.search(name).groups(1)#筛选name项
item['link']=ele.xpath('./@href').extract()[0]#直接提取Link
yield item

6、完整代码如下

import scrapy
from scrapy import Request
from BD.items import BdItem
import re class BdsSpider(scrapy.Spider):
name = 'BDS'
allowed_domains = ['www.baidu.com']
key=input('输入关键字')
url='http://www.baidu.com/s?wd='+key
start_urls = [url] def parse(self, response):
item=BdItem()
eles=response.xpath('//*[@class="t"]/a')
for ele in eles:
name=ele.xpath('.').extract()
name=''.join(name).strip()
name=name.replace('<em>','').replace('</em>', '')
re_bd=re.compile(r'>(.*)</a>')
item['name']=re_bd.search(name).groups(1)
item['link']=ele.xpath('./@href').extract()[0]
yield item
next_url = self.url + '&pn=10'
yield Request(url=next_url)

7、运行

scrapy crawl BDS -O baidu.csv

其他

Setting中需要设置User-Agent,以避免被百度识别为爬虫而拒绝请求

Python:输入关键字进行百度搜索并爬取搜索结果的更多相关文章

  1. Python使用urllib,urllib3,requests库+beautifulsoup爬取网页

    Python使用urllib/urllib3/requests库+beautifulsoup爬取网页 urllib urllib3 requests 笔者在爬取时遇到的问题 1.结果不全 2.'抓取失 ...

  2. Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(人人网)(下)

    Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(下) 自动使用cookie的方法,告别手动拷贝cookie http模块包含一些关于cookie的模块,通过他们我们可以自动的使用co ...

  3. 第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

    第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ...

  4. 十三 web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

    crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息, ...

  5. [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息

    [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息 2018-07-21 23:53:02 larger5 阅读数 4123更多 分类专栏: 网络爬虫   版权声明: ...

  6. Python网页解析库:用requests-html爬取网页

    Python网页解析库:用requests-html爬取网页 1. 开始 Python 中可以进行网页解析的库有很多,常见的有 BeautifulSoup 和 lxml 等.在网上玩爬虫的文章通常都是 ...

  7. Python开发简单爬虫(二)---爬取百度百科页面数据

    一.开发爬虫的步骤 1.确定目标抓取策略: 打开目标页面,通过右键审查元素确定网页的url格式.数据格式.和网页编码形式. ①先看url的格式, F12观察一下链接的形式;② 再看目标文本信息的标签格 ...

  8. 爬虫(二)Python网络爬虫相关基础概念、爬取get请求的页面数据

    什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程. 哪些语言可以实现爬虫    1.php:可以实现爬虫.php被号称是全世界最优美的语言(当然是其自己号称的,就是王婆 ...

  9. Python爬虫小白入门(六)爬取披头士乐队历年专辑封面-网易云音乐

    一.前言 前文说过我的设计师小伙伴的设计需求,他想做一个披头士乐队历年专辑的瀑布图. 通过搜索,发现网易云音乐上有比较全的历年专辑信息加配图,图片质量还可以,虽然有大有小. 我的例子怎么都是爬取图片? ...

随机推荐

  1. django之js模板插件artTemplate的使用

    安装: 方式1:artTemplate模板源码下载地址:https://aui.github.io/art-template/zh-cn/index.html 方式2:使用node.js进行安装:np ...

  2. 如何在pyqt中使用 QGraphicsView 实现图片查看器

    前言 在 PyQt 中可以使用很多方式实现照片查看器,最朴素的做法就是重写 QWidget 的 paintEvent().mouseMoveEvent 等事件,但是如果要在图像上多添加一些形状,那么在 ...

  3. 「LOJ 6373」NOIP2017 普及组题目大融合

    NOIP2017 普及组题目大融合 每个读者需要有某个后缀的书,可以暴力map,复杂度\(o(9*nlog(n))\),也可以反串建trie树,复杂度\(o(9*n)\). 故可以求出需要的最少的RM ...

  4. 通过Xib加载控制器的View

    1.创建窗口self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];2.设置窗口根控制器2.1从XIB当 ...

  5. nodejs process uncaughtException

    用过Node一段时间之后,发现那些在事件主循环里碰到的异常会导致Node进程退出.在许多应用场景下,特别是对那些希望永不当机的服务器程序来说,这都是不接受的.uncaughtException事件会提 ...

  6. iOS团队代码规范

    iOS团队代码规范 工程之始可能需要的工具: 1.使用CocoaPods类库管理工具.CocoaPods安装和使用教程. 2.下载安装注释插件VVDocumenter-Xcode. 一.项目结构管理 ...

  7. php函数(parse_str()

    parse_str()函数 把查询字符串解析到变量中 parse_str(string, array); string 规定要解析的字符串 array 存储变量的数组名称 例子: <?php p ...

  8. git本地仓库关联多个远程仓库及取消关联

    关联 本地和远程仓库关联步骤: 在网站上(如gitee.github等,这里以gitee为例)首先添加好自己的ssh公钥 本地创建一个空的项目,即文件夹. 在文件夹下git init初始化仓库 在gi ...

  9. fuzz——AFL基础使用方法

    最近打 ctf 的时候感觉有点遇到瓶颈,就来 fuzz 这块看看. AFL 全称为 American huzzy loop,是 Fuzzing 最高级的测试工具之一.这个工具对有源码和无源码的二进制程 ...

  10. 框架02--Iptables实际应用

    目录 Iptables实际应用 一.安装iptables 1. 安装iptables软件包 2. 命令格式 3. 参数 二.iptables动作 三.Iptables基本的条件匹配(协议) 四.-s ...