python 爬虫相关含Scrapy框架
1、从酷狗网站爬取 新歌首发的新歌名字、播放时长、链接等
from bs4 import BeautifulSoup as BS
import requests
import re
import json
class StockCrawler(): def __init__(self):
pass def get_stockinfo(self,url):
res=requests.get(url)
res.encoding='utf-8'
soup=BS(res.text,'html.parser') stock_info=[]
div=soup.find_all('div',id='SongtabContent') #定位最外层的新歌区域标签
li=div[0].find_all('li') for i in li: #遍历每首歌的标签,分别取歌名、歌播放时长、链接
print(i) link='http:'+i.find_all('a')[0]['href']
print('link:',link) songname=i.a.find_all('span',class_='songName')[0].text
songtime=i.a.find_all('span',class_='songTime')[0].text
print('songname:',songname)
print('songtime:',songtime) stock_info.append((songname,songtime,link)) return stock_info def write_file(self,data,file_name):
with open(file_name,'w',encoding='utf-8') as fp:
for i in data:
fp.write(i[0]+','+i[1]+','+i[2]+'\n') #写入文件 if __name__=='__main__': url='http://www.kugou.com/'
stockcrawler=StockCrawler()
data=stockcrawler.get_stockinfo(url)
stockcrawler.write_file(data,'f:\\test\\pppp.txt')
2、sohu网站首页 爬取包含"体育"2个字的链接
r = requests.get("http://www.sohu.com")
r.encoding="utf-8"
html = r.text
soup = BeautifulSoup(html,"html.parser")#html可以是html内容 links = []
for i in list(soup.find_all(["a"])):
try:
print(i["href"])
if i["href"].strip().startswith(r"//"):
print(1)
i["href"]="http:"+i["href"]
if i["href"].find("javascript")>=0:
print(2)
continue
if i["href"].find("mailto")>=0:
print(3)
continue
if len(i["href"].strip())==1:
print(4)
continue
#print(i["href"])
links.append(i["href"].strip())
#print("*"*50)
except Exception as e:
print(e) for link in links:
print(link) x=1
for link in links:
r = requests.get(link)
r.encoding = "utf-8"
if "体育" in r.text:
with open("e:\\pic\\"+str(x)+".txt","w",encoding="utf-8") as fp:
fp.write(r.text)
x+=1
3、使用代理服务器 发送请求
proxy='168.0.86.146:8080' #如果代理需要验证,只需要在前面加上用户名密码,如下所示 # proxy='username:password@124.243.226.18:8888'
proxies={
'http':'http://'+proxy,
'https':'https://'+proxy,
}
try:
response=requests.get('http://httpbin.org/get',proxies=proxies)
print(response.text)
except requests.exceptions.ConnectionError as e:
print("Error",e.args)
4、Srapy 爬虫框架
#Scrapy 爬虫框架
'''
scrapy startproject testman 1)items.py 存储你要爬取的数据的变量。
类似于字典。 2)pipelines.py(保存爬取后的数据):保存你抓取网页,分析后的存储的
变量中的数据存入到某个地方。(json文件)txt文件、excel 、数据库。 3)settings.py:设定spider的优先级,自动生成的,取消掉数据就可以了。
ITEM_PIPELINES = {'gr.pipelines.GrPipeline': 300,} gr:抓取器的名字 4)在spider的目录下,写一下分析逻辑(从网页中取想要的数据,保存到items.py声明的变量中。) 框架使用的步骤:
1 新建scrapy工程,在任意目录下,cmd中执行:scrapy startproject groad
2 生成工程的内容,在scrapy的根目录下cmd中
执行:scrapy genspider newsong www.kugou.com
3 编写相关代码
4 在scrapy的根目录下,cmd执行抓取:scrapy crawl newsong '''
5、Scrapy框架的例子,酷狗爬取新歌首发的歌曲名称、播放时长、歌曲链接等
#items.py文件内容
import scrapy class GroadItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
#定义项目的字段
songname=scrapy.Field() #歌曲名称
songtime=scrapy.Field()#歌曲播放时间
href_song=scrapy.Field()#歌曲播放链接 if __name__=='__main__':
g=GroadItem()
print(g['songname']) #pipelines.py 文件内容 import json
class GroadPipeline(object):
def __init__(self): self.filename=open('f:\\test\\newsong.txt','w',encoding='utf-8') def process_item(self, item, spider):
text=json.dumps(dict(item),ensure_ascii=False)+'\n'
self.filename.write(text)
return item def close_spider(self,spider):
self.filename.close() #settings.py文件,放开注释 ITEM_PIPELINES = {
'groad.pipelines.GroadPipeline': 300,
} #newsong.py 文件 import scrapy
from groad.items import GroadItem class NewsongSpider(scrapy.Spider):
name = 'newsong'
allowed_domains = ['www.kugou.com']
start_urls = ['http://www.kugou.com/'] def parse(self, response):
item=GroadItem()
for i in range(1,len(response.xpath('//*[@id="SongtabContent"]/ul'))+1):
for j in range(1,len(response.xpath('//*[@id="SongtabContent"]/ul[%s]/li' % i))+1):
item['songname']=response.xpath('//*[@id="SongtabContent"]/ul[%s]/li[%s]/a/span[1]/text()' % (i,j)).extract()[0]
item['songtime'] =response.xpath('//*[@id="SongtabContent"]/ul[%s]/li[%s]/a/span[@class="songTime"]/text()' % (i, j)).extract()[0]
item['href_song'] = response.xpath('//*[@id="SongtabContent"]/ul[%s]/li[%s]/a/@href' % (i, j)).extract()[0] yield item
python 爬虫相关含Scrapy框架的更多相关文章
- Python爬虫进阶之Scrapy框架安装配置
Python爬虫进阶之Scrapy框架安装配置 初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此 ...
- python爬虫入门(六) Scrapy框架之原理介绍
Scrapy框架 Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬 ...
- 零基础写python爬虫之使用Scrapy框架编写爬虫
网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间.Scrapy是一个使用Python编写的,轻 ...
- PYTHON 爬虫笔记十一:Scrapy框架的基本使用
Scrapy框架详解及其基本使用 scrapy框架原理 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了 ...
- python爬虫学习之Scrapy框架的工作原理
一.Scrapy简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, 网 ...
- Python爬虫知识点四--scrapy框架
一.scrapy结构数据 解释: 1.名词解析: o 引擎(Scrapy Engine)o 调度器(Scheduler)o 下载器(Downloader)o 蜘蛛(Spiders)o 项目管 ...
- 芝麻HTTP:Python爬虫进阶之Scrapy框架安装配置
初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 ...
- 【Python爬虫实战】Scrapy框架的安装 搬运工亲测有效
windows下亲测有效 http://blog.csdn.net/liuweiyuxiang/article/details/68929999这个我们只是正确操作步骤详解的搬运工
- Mac os 下 python爬虫相关的库和软件的安装
由于最近正在放暑假,所以就自己开始学习python中有关爬虫的技术,因为发现其中需要安装许多库与软件所以就在这里记录一下以避免大家在安装时遇到一些不必要的坑. 一. 相关软件的安装: 1. h ...
随机推荐
- mysql函数IFNULL的使用替换递归方法
在电商行业经常遇到的问题就是类目与类目以及类目与商品的关系. 如果要查询一级类目下的所有商品 常规做法是先查询该一级类目下所有的二级类目,再由二级类目查询所有的三级类目,直到最后一级,再查询出对应的商 ...
- 09点睛Spring MVC4.1-异步请求处理(包含兼容浏览器的服务器端推送)
转发地址:https://www.iteye.com/blog/wiselyman-2215852 9.1 异步请求处理 Servlet 3开始支持异步请求处理 Spring MVC 3.2开始支持S ...
- Ubuntu中打开Qt creator,提示无法覆盖文件 /home/username/.config/Nokia/qtversion.xml : Permission denied
官网下载qt*.run文件安装后 打开Qt creator,提示无法覆盖文件 /home/username/.config/Nokia/qtversion.xml : Permission denie ...
- conda 创建tensorflow虚拟环境后,无法import tensorflow在jupyter
ensorflow安装好了,在python中也测试过了,但在jupyter中却会报错,原因是先装的Anaconda 之后装的tensorflow,所以环境有问题,所以需要重装jupyter,先激活te ...
- SpringMVC常用注解@Controller,@Service,@repository,@Component,@Autowired,@Resource,@RequestMapping
1.controller层使用@Controller注解-用于呈现层,(spring-mvc) @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controlle ...
- Zuul【入门】
1.创建eureka-server注册中心工程,配置跟之前讲eureka文章中一样,这里不再赘述 1.1.端口8888 2.创建一个demo-client工程 2.1.demo-client启动类跟之 ...
- Android中使用LitePal操控SQLite数据库
<第一行代码>读书手札 (一)什么是LitePal数据库 LitePal数据库是安卓的一个开源库,我们在以后的开发中,将会遇到许许多多的开源库,感谢开源社 区:因为开源社区的存在,一些我们 ...
- Python27之集合
集合说:“在我的世界里,你就是唯一” 一.集合的概念和使用 集合的概念和数学里数学里集合的概念是一致的,都是一组元素的集,且元素之间不能重复.元素必须是不可变的数据类型,例如元组也可以作为其中的一个元 ...
- Python中使用列表的一部分——参考Python编程从入门到实践
处理列表中的部分元素——切片 1. 切片 players = ['charles', 'martina', 'michael', 'florence', 'eli'] print(players[0: ...
- vue-cli3.0 关闭eslint校验
1. 跟着课程学习vue高级训练营时,vue-cli老是报eslint校验错误,把它关了! 网上找到了图中这个写法,可是报错啊! 解决办法:把false改为true 参考:https://blog ...