1.使用python的re模块过滤html标签

In [1]: response.xpath("//div[@class='zx-dis_content']/p").extract()

Out[1]:

['

',

'

'

\xa0 \xa0 \xa0 \xa0张舜咨苍鹰竹梧图轴 \xa0 \xa0元,绢本,设色。纵146厘米,横93厘米。

',

'

此图画一只黄鹰独立 于梧桐树之上,昂首远眺,目光咄咄。树下墨竹成趣。黄鹰的画法师承宋代院体画派,造型准确,羽毛用细笔勾描后填色,工整细致,刻画精微,神形毕肖。梧桐和墨竹用兼工带写的笔法,于苍古之中又见清润之致。画中自题云:“张舜咨师夔为德英识”,另有萨达道、刘嵩题诗。张舜咨传世作品极少,此幅设色淡雅、繁简得当,在其作品中亦属佳品。
\xa0\xa0\xa0\xa0\xa0 张舜咨,生卒年不详,元 代画家。一名羲上,字师夔,号栎山、辄醉翁,钱塘(今浙江杭州)人。善画山水、竹石,用笔沉着,颇有气势,兼长诗、书,人称“三绝”。精心研习诸家画技,吸取各家之长,自成一家。作画讲究布局,大幅小景,布置各有其法。所作山水画,使人有身临其境之感。画古柏苍老擎天,别具风气。

']

使用scrapy shell查看,发现想要获取的数据是带有标签的数据,但是只想要标签内的文本,因此进行html标签过滤

raw_description = response.xpath("//div[@class='zx-dis_content']/p").extract() # 带标签的文本

string = "".join(raw_description)

dr = re.compile(r']+>', re.S) # 构建匹配模式

dd = dr.sub('', string) # 去除html标签

item['description'] = dd.strip().replace('\xa0', '').replace('\u3000', '').replace('\r\n', '')

2.在浏览器中构建的xpath在python中却无法获取数据

第一种情况:xpath写的太长很容易出错

第二种情况:浏览器中的代码和源码不一致

浏览器对不标准的HTML文档都有纠正功能,同样的URL浏览器会加载js事件,所以浏览器和python爬虫类requests打开同样的URL获取的源码肯定是不一样的,因此最好是查看page source(是源代码,不是developer tool那个)。

3.Python scrapy中统计parse函数的执行次数

在spider类里面加个计数变量,然后再closed() 方法里面添加log,把计数给打印出来

class MySpider(scrapy.Spider):

def __init__(self):

self.count = 0

def parse(self, response):

self.count += 1

def closed(self):

log(self.count)

4.使用meta传递信息

Request中meta参数的作用是传递信息给下一个函数,meta是一个dict,一种常见的情况:在parse中给item某些字段提取了值,但是另外一些值需要在parse_item中提取,这时候需要将parse中的item传到parse_item方法中处理,显然无法直接给parse_item设置而外参数。 Request对象接受一个meta参数,一个字典对象,同时Response对象有一个meta属性可以取到相应request传过来的meta。

使用过程可以理解成:

1---把需要传递的信息赋值给这个叫meta的变量,但meta只接受字典类型的赋值,因此要把待传递的信息改成“字典”的形式,即:meta={'key1':value1,'key2':value2}

2---如果想在下一个函数中取出value1,只需得到上一个函数的meta['key1']即可,

因为meta是随着Request产生时传递的,下一个函数得到的Response对象中就会有meta,即response.meta,取value1则是value1=response.meta['key1']

class example(scrapy.Spider):

name='example'

allowed_domains=['example.com']

start_urls=['http://www.example.com']

def parse(self,response):

#从start_urls中分析出的一个网址赋值给url

url=response.xpath('.......').extract()

#ExamleClass是在items.py中定义的,下面会写出。

"""记住item本身是一个字典"""

item=ExampleClass()

item['name']=response.xpath('.......').extract()

item['htmlurl']=response.xpath('.......').extract()

"""通过meta参数,把item这个字典,赋值给meta中的'key'键(记住meta本身也是一个字典)。

Scrapy.Request请求url后生成一个"Request对象",这个meta字典(含有键值'key','key'的值也是一个字典,即item)

会被“放”在"Request对象"里一起发送给parse2()函数 """

yield Request(url,meta={'key':item},callback='parse2')

def parse2(self,response):

item=response.meta['key']

"""这个response已含有上述meta字典,此句将这个字典赋值给item,

完成信息传递。这个item已经和parse中的item一样了"""

item['text']=response.xpath('.......').extract()

#item共三个键值,到这里全部添加完毕了

yield item

5.python 字符串(str)和列表(list)的互相转换

1.str >>>list

str1 = "12345"

list1 = list(str1)

print list1

str2 = "123 sjhid dhi"

list2 = str2.split() #or list2 = str2.split(" ")

print list2

str3 = "www.google.com"

list3 = str3.split(".")

print list3

输出为:

['1', '2', '3', '4', '5']

['123', 'sjhid', 'dhi']

['www', 'google', 'com']

2.list >>>str

str4 = "".join(list3)

print str4

str5 = ".".join(list3)

print str5

str6 = " ".join(list3)

print str6

输出为:

wwwgooglecom

www.google.com

www google com

6. 文件读写'r' 和 'rb'区别

文件使用方式标识:

'r':默认值,表示从文件读取数据。

'w':表示要向文件写入数据,并截断以前的内容

'a':表示要向文件写入数据,添加到当前内容尾部

'r+':表示对文件进行可读写操作(删除以前的所有数据)

'r+a':表示对文件可进行读写操作(添加到当前文件尾部)

'b':表示要读写二进制数据

注:使用'r'/'w'进行读/写二进制文件时,遇到'0x1A'即停止,因此可能会出现文档读/写不全的现象。

解决办法:使用'rb'/'wb'来读/写二进制文件。

7. Python中的lambda使用

func=lambda x:x+1

print(func(1))

#2

print(func(2))

#3

#以上lambda等同于以下函数

def func(x):

return(x+1)

可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体。在这里lambda简化了函数定义的书写形式,使代码更为简洁。

8.哈希函数

# 导入hash库

import hashlib

# 实例化对象

md5 = hashlib.md5()

# 准备两个不同的字符串,用来进行对比

text1 = "There are two books"

text2 = "There are 2 books"

# 对第一个字符串进行哈希运算

md5.update(text1.encode('utf-8'))

hash1 = md5.hexdigest()

# 打印第一个字符串的哈希值

print("第一个字符串的哈希值:" + hash1)

# 对第二个字符串进行哈希运算

md5.update(text2.encode('utf-8'))

hash2 = md5.hexdigest()

# 打印第二个字符串的哈希值

print("第二个字符串的哈希值:" + hash2)

9.文件操作

列出当前目录下的所有文件和目录名

import os

for d in os.listdir('D:/Pythonworkspace/Instrument/'):

print(d)

输出某个路径及其子目录下所有以".xlsx"为后缀的文件

import os

def print_dir(filepath):

for i in os.listdir(filepath):

path = os.path.join(filepath, i)

if os.path.isdir(path):

print_dir(path)

if path.endswith(".xlsx"):

print(path)

filepath = "D:/Pythonworkspace/Instrument/"

print_dir(filepath)

10.

python的scrapy爬虫模块间进行传参_Python | Scrapy 爬虫过程问题解决(持续更新...)...相关推荐

  1. python的scrapy爬虫模块间进行传参_小猪的Python学习之旅 —— 4.Scrapy爬虫框架初体验...

    小猪的Python学习之旅 -- 4.Scrapy爬虫框架初体验 Python 引言: 经过前面两节的学习,我们学会了使用urllib去模拟请求,使用 Beautiful Soup和正则表达式来处理网 ...

  2. python中两个文件如何互相传参_argparse模块如何在jupyter notebook中用于传参?

    作者:于晨晨 研究方向:nlp 发表于公众号:AI技术日常 在python代码文件中,通常需要传参,传参就需要经常使用argparse.使用argparse模块在py文件中是正常的,但是jupyter ...

  3. python使用requests处理form-data格式的传参

    python使用requests处理form-data格式的传参 方法一:使用MultipartEncoder 方法二:在request中使用参数data 方法一:使用MultipartEncoder ...

  4. python网络爬虫与信息提取_北京理工大学_Python网络爬虫与信息提取(一)

    学习 北京理工大学 嵩天 课程笔记 课程体系结构: 1.Requests框架:自动爬取HTML页面与自动网络请求提交 2.robots.txt:网络爬虫排除标准 3.BeautifulSoup框架:解 ...

  5. Python基础day05【函数(函数传参的两种形式、函数形参)、拆包、引用、可变与不可变类型、引用做函数参数注意点】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]    目录 0.复习 1.函数传参的两种形式[掌握] 2.函数形参 2.1.缺省参数(默认参数) ...

  6. python学习-高阶函数(函数传参、返回函数(闭包)、匿名函数lambda)

    文章目录 高阶函数 函数传参 返回函数(闭包) 匿名函数lambda 高阶函数 定义: 至少满足下列一个条件: 接受一个或多个函数作为输入 输出一个函数 python里的高阶函数有 filter.ma ...

  7. Python测试开发django5.templates模板变量传参

    上一篇,我们学习了Python测试开发django4.templates模板配置 templates模板中html文件是一个静态页面,写四的,如果有时我们想动态的传入一些不同的参数,想实现在一个固定的 ...

  8. 玩转python网络爬虫黄永祥pdf下载_Python网络爬虫从入门到实践pdf

    Python网络爬虫从入门到实践 内容简介 本书将介绍如何使用Python编写网络爬虫程序获取互联网上的大数据.本书包括三部分内容:基础部分.进阶部分和项目实践.基础部分(第1~6章)主要介绍爬虫的三 ...

  9. python装饰器传参与不传参_Python装饰器不会传参?别着急,这篇文章为你解惑

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第13篇文章,上一篇文章当中我们介绍了Python装饰器的定义和基本的用法,这篇文章我们一起来学习一下Python装 ...

最新文章

  1. 打破深度学习局限,强化学习、深度森林或是企业AI决策技术的“良药”
  2. 删除username的索引
  3. Combox使用的一些技巧
  4. 第九届蓝桥杯C++B组
  5. 算法黑话大赏,我直呼好家伙!
  6. 实例--[QSerialPort]串口通信_vortex_新浪博客
  7. 浏览器播放rtsp流媒体解决方案
  8. Redis 学习之事务处理
  9. c语言逻辑运算符意义,c语言逻辑运算符怎么理解?
  10. QT练习samp2_2_test——用按钮编辑文本框特性
  11. 茶 与 茶道 之 人生如茶
  12. 「2019纪中集训Day12」解题报告
  13. 轻量化网络-SqueezeNet(2016)
  14. 数据压缩作业1-1|利用Audacity分析浊音、清音、爆破音的时域及频域特性
  15. 已经配置javahome了的,还出现A Java Runtime Environment (JRE) or Java Development
  16. AltiumDesigner下载安装
  17. Finding Your Better Half
  18. 什么是电压跟随器?电压跟随器计算方法讲解
  19. 2012北京航空航天大学考研机试真题
  20. Python3 面向对象基础1

热门文章

  1. c语言找最长串指针改错,全国计算机二级C语言上机 (改错题)【DOC精选】.doc
  2. 3d max用不同目标做关键帧_基于光流的视频目标检测系列文章解读
  3. pilt图像处理_详解python opencv、scikit-image和PIL图像处理库比较
  4. 红米note2移动4g在哪里显示无服务器,红米note2移动版能用联通4g吗?红米note2插联通卡用法介绍...
  5. 玻璃质感_素描丨零基础,你也可以画出玻璃质感
  6. html页面缓存纪txt,cdn缓存的html静态页未更新小记
  7. Python练习题:批量删除多个文件夹内的相同文件
  8. 使用Python内置的smtplib包和email包来实现邮件的构造和发送
  9. angular2 php 教程,有关Material在Angular2中的使用(详细教程)
  10. android开发菜单,Android学习指南之十六:Android菜单详解