笔记

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),
    )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值