学习自:手把手教你用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. 单例模式的各种实现方式(Java)

    单例模式的基础实现方式 手写普通的单例模式要点有三个: 将构造函数私有化 利用静态变量来保存全局唯一的单例对象 使用静态方法 getInstance() 获取单例对象 懒汉模式 懒汉模式指的是单例对象 ...

  2. ApacheCN Pandas 教程集

    Pandas 秘籍 零.前言 一.Pandas 基础 二.数据帧基本操作 三.开始数据分析 四.选择数据子集 五.布尔索引 六.索引对齐 七.分组以进行汇总,过滤和转换 八.将数据重组为整齐的表格 九 ...

  3. 势能分析(splay分析)

    定义 第\(x\)次操作后,势能为\(\phi(x)\),该操作实际复杂度\(c(x)\),均摊复杂度\(a(x)\). 定义\(a(x)=c(x)+\phi(x)-\phi(x-1)\). 那么总复 ...

  4. 「JOI 2014 Final」飞天鼠

    「JOI 2014 Final」飞天鼠 显然向上爬是没有必要的,除非会下降到地面以下,才提高到刚好为0. 到达一个点有两种情况:到达高度为0和不为0. 对于高度不为0的情况,显然花费的时间越少高度越高 ...

  5. 【转】Nestable可拖拽树

    原文地址:https://blog.csdn.net/wangmj518/article/details/81746523 Nestable是基于Bootstrap的一个可拖拽的树结构表现插件. 下面 ...

  6. 为什么C语言Scanf函数对字符串不要加 取地址运算符&

    原文1:http://www.360doc.com/content/16/0515/11/19455598_559288667.shtml 原文2:https://zhidao.baidu.com/q ...

  7. VC中如何将资源打包并释放到指定文件夹

    转载请注明来源:https://www.cnblogs.com/hookjc/ 很多时候,我们可能要将某些文件打包到资源中,然后当程序执行的时候,发现缺少某些文件时,进行自我修复,以维持程序的正常执行 ...

  8. NSMutableString常用方法

    1.NSMutableString常用方法 - (void)appendString:(NSString *)aString; 拼接aString到最后面 NSMutableString *strM ...

  9. LVS+Keepalived 高可用群集部署

    LVS+Keepalived 高可用群集部署 1.LVS+Keepalived 高可用群集概述 2.LVS+Keepalived高可用群集部署 1.LVS+Keepalived 高可用群集概述: LV ...

  10. python基础——生成器与迭代器

    生成器 def func(): print("111") yield 1 print("222") yield 3 print("333") ...