来一次完整的爬虫

2018-09-08  本文已影响0人  dec0de丶bcd385丶

模拟登陆网站需要的库是

request

重点内容是正则表达式

pattern =re.compile(r'{.*?}')
listlist=pattern.findall(findok.group())

还有eval函数也是很重要的。

aa= [eval(x) for x in listlist]

第一步设定好网址,并且模拟登陆,保存session。

cs_url  = 'http://网址'

    my_headers = {
        'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',
        'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding' : 'gzip',
        'Accept-Language' : 'zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4'
    }
    sss     = requests.Session()
    r       = sss.get(cs_url, headers = my_headers)

获取跳转的网址内容

cs_url  = 'http://网址'
    r       = sss.post(cs_url, headers = my_headers)

把post返回内容正常解码

    a_str=r.text

搜索处理的代码块

xa_str=a_str[a_str.find(' '):a_str.find(' ')]

按照正则表达式和eval函数把代码块变成一个列表。
连接所有的列表。 all_list.extend(xueyuan_list)

    all_list.extend(xueyuan_list)
    all_list.extend(daijiao_list)
    all_list.extend(jiaomi_list)
    all_list.extend(zhuren_list)

生成序号,迭代列表的序号来生产sql的自动序号,不然sql没有自动序号不能恢复,这是一个bug啊。

    zhongjian = [str(index+1) + ",'"+x[0]+"','" +x[1] +"','" +x[2] +"'" for index,x in enumerate(all_list)]

用join连接字符串。

zhongzhi = '),('.join(zhongjian)

最后收尾写入文件。

    with codecs.open('zyys.sql','w','utf-8') as f2:
        f2.write(tou + zhongzhi + wei)

    print ('OK')

再上传到网站就可以肋,发现数据库更新后网站内容也更新了。而不是文件更新后需要刷新网站,只更新数据库可以省一个刷新网站的步骤。
这样就完成了所有任务。
做起来难的是登录网站,之前不会模拟登录,尝试跳转网站废了很多时间。今天却在response上面没整清楚,其实返回的内容用
.text处理后就自动解决中文问题了,而且还是utf-8的中文,更适合处理了。找到适合的正则表达式,用字符串截取也可以,看是不是唯一,是不是匹配下一步处理。

上一篇 下一篇

猜你喜欢

热点阅读