python3爬虫(复制出原HTML正则匹配成功,换成原url时正则匹配出内容为空)

python3爬取网站数据

1.原文格式
在这里插入图片描述
2.需求:多个tr中获取他们td里的值,并保存数据

3.实现

import re
import urllib.request
from urllib.parse import urlencode
import csv
import time

def get_one_page(url, page):
	#加头信息,User-Agent是有时候对方可能为了防爬虫做了判断,所以最好加上
	#content-type 传参x-www-form-urlencoded时需要加上
    headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}  
    #尽量少的次数查更多的数据 观察目标每页最多可展示多少条数据
    postdata = {
        "currentpage":page,
        "pagesize":40
    }
    data = urlencode(postdata).encode('utf-8')
    req = urllib.request.Request(url, data=data, headers=headers)  
    response = urllib.request.urlopen(req)
    html = response.read().decode('utf-8')
    return html

def save_one_page(data):
    f = open('data.csv','a+',encoding='utf-8')
    csv_writer = csv.writer(f)
    for item in data:
        usedata = []
        for i in item:
            usedata.append(i)
        csv_writer.writerow(usedata)
    f.close()

def parse_one_page(html):
	#正则改了好久好久 有换行 换行后有空格
    pattern = re.compile('<tr.*?color:#535353.*?>[\s\S].*<td.*?>&nbsp;([\s\S]*?)</td>[\s\S].*<td.*?>[\s\S].*<a.*?id="(.*?)".*?>[\s\S] *([\s\S]*?)[\s\S].*</a></td>[\s\S].*<td.*?>[\s\S].*<a.*?>[\s\S] *([\s\S]*?)[\s\S].*</a></td>[\s\S].*<td.*?>[\s\S].*<a.*?>[\s\S] *([\s\S]*?)[\s\S].*</a>[\s\S].*</td>[\s\S].*<td.*?><a.*?>([\s\S]*?)</a></td>[\s\S].*<td.*?><a.*?>([\s\S]*?)</a></td>[\s\S].*</tr>')
    items = re.findall(pattern, html)
    return items

def main():
    url = 'http://www.****'
    for i in range(1,30):
        html = get_one_page(url, i)
        #下方为什么替换字符串,看下边
        html = (html.replace("\r\n","\n"))
        html = (html.replace("\t",""))
        data = parse_one_page(html)
        save_one_page(data)
        #睡几秒,原因是如果对方做了接口限频
        #或者,被封IP了怎么办
        time.sleep(3)
        print(i)

main()

这里为什么要替换字符串,讲讲故事
原网站速度很慢,所以把源码复制下来放自己网站,先匹配自己网站
自己的爬成功后,换成人家的url后,发现匹配出的内容为空
问题出在了哪里,一晚上,肉眼直接看愣是不会发现,之前也没复制出来匹配过
解决:把从复制的和人家网站获取的网页内容分别保存到txt文件中观察
发现文件大小不一样,复制的内容会把人家原本的\r\n和\t去掉
为了方便,已经写好的正则就没改了,直接把人家原本的html替换了字符串

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值