Xpath中contains
contains 匹配一个属性值中包含的字符串 – 模糊定位
<a href="http://www.baidu.com">百度搜索</a>
//a[text()='百度搜索']
或
//a[contains(text(),"搜索")] --文本模糊定位
<a id="setf" href="//www.baidu.com/cache/sethelp/help.html" onmousedown="return ns_c({'fm':'behs','tab':'favorites','pos':0})" target="_blank">把百度设为主页</a>
//a[text()='把百度设为主页']
requests中文乱码问题
response = requests.get(url)
response.encoding='utf-8'
lxml中的etree
import requests
from lxml import etree
url = 'https://tech.china.com/article/20180723/20180723170053.html'
response = requests.get(url)
response.encoding='utf-8'
html = etree.HTML(response.text)
python join()方法
Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
str.join(sequence) #sequence -- 要连接的元素序列。
实例:
str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq );
python strip()
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
语法:
str.strip([chars]);
python lambda表达式
lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
lambda所表示的匿名函数的内容应该是很简单的,如果复杂的话,干脆就重新定义一个函数了,使用lambda就有点过于执拗了。
lambda就是用来定义一个匿名函数的,如果还要给他绑定一个名字的话,就会显得有点画蛇添足,通常是直接使用lambda函数。如下所示:
add = lambda x, y : x+y
add(1,2) # 结果为3
python os.path realpath
返回指定文件的标准路径,而非软链接所在的路径
>>> os.path.realpath("/etc/sysconfig/selinux")
'/etc/selinux/config'
>>> os.path.realpath("/usr/bin/python")
'/usr/bin/python2.7'
python os.path dirname
返回一个目录的目录名
>>> os.path.dirname("/etc/sysconfig/selinux")
'/etc/sysconfig'
>>> os.path.dirname("/usr/local/python3/bin/python3")
'/usr/local/python3/bin'
os.path.dirname():去掉脚本的文件名,返回目录。
os.path.dirname(os,path.realname(__file__)):指的是,获得你刚才所引用的模块 所在的绝对路径,__file__为内置属性。
json.loads
json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
实例:
以下实例展示了Python 如何解码 JSON 对象:
#!/usr/bin/python
import json
jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = json.loads(jsonData)
print text
结果为:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
sys模块
- sys模块的常见函数列表
- sys.argv: 实现从程序外部向程序传递参数。
- sys.exit([arg]): 程序中间的退出,arg=0为正常退出。
- sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。
- sys.setdefaultencoding():
设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行
setdefaultencoding(‘utf8’),此时将系统默认编码设置为utf8。(见设置系统默认编码 ) - sys.getfilesystemencoding():
获取文件系统使用编码方式,Windows下返回’mbcs’,mac下返回’utf-8’. - sys.path: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。
- sys.platform: 获取当前系统平台。
- sys.stdin,sys.stdout,sys.stderr: stdin , stdout , 以及stderr 变量包含与标准I/O
流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们,
这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们
sys.argv
功能:在外部向程序内部传递参数
示例:sys.py
import sys
print sys.argv[0]
print sys.argv[1]
运行:
# python sys.py argv1
sys.py
argv1
Python eval() 函数
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
语法:
eval(expression[, globals[, locals]])
参数
- expression – 表达式。
- globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
- locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
实例:
>>>x = 7
>>> eval( '3 * x' )
21
>>> eval('pow(2,2)')
4
>>> eval('2 + 2')
4
>>> n=81
>>> eval("n + 4")
85
实例:
def test(a,b):
for i in range(a, b):
yield i
response = list(eval('tes' + 't')(1,10)) # list(eval("urls."+ start_urls.get('method'))(*start_urls.get('args', [])))
print(response)
Scrapy通用爬虫中 TypeError: ‘Rule’ object is not iterable 问题
rules = (
Rule(LinkExtractor(restrict_xpaths='//div[@class="page"]/a[contains(., "下一页")]'), callback='parse_item', follow=True)
)
报错为:TypeError: ‘Rule’ object is not iterable
需要在rules最后加个 逗号 ,
rules = (
Rule(LinkExtractor(restrict_xpaths='//div[@class="page"]/a[contains(., "下一页")]'), callback='parse_item', follow=True),
)