关闭

python简单正则的爬取

990人阅读 评论(0) 收藏 举报
分类:

 这是做的第一个任务,爬取  http://www.thebigdata.cn/  中的标题和链接。

 红框中为要爬取的部分:


 以下为部分源代码:


 1、 我一开始是在linux系统下做的,因为是跟着视频学习,然而遇到一些问题,所以改为在PYcharm里,练习的时候是链接和标题分开爬取的,所以将写的代码复制粘贴,运行,然而并没有出现什么,失败。当时是正则的问题。但是在我的电脑上出现了一个问题:


其实这对数据爬取没什么影响,上网查了一下,SID就是为域或本地计算机中创建的每个帐户分配的唯一ID 字符串因为我的电脑中建立.py文件时会自动生成:

__author__ = 'DELL'
这一行代码,后来在解决其他问题时,因为它多余去掉了,很幸运虽然那个问题虽没解决,但这个问题再没有出现过。

2、最开始是将链接和标题分开练习爬取的,爬取链接时发现不止有所需要的链接还有一些网址,类似这样:

发现是正则写的不够全面,观察了一下,发现要爬取的链接开头都是大写英文字母,所以就将正则改为了:

reg=r'href="(.*?)\.html"'
#改为#
reg=r'href="([A-Z].*?)\.html"'
其实这有些投机取巧,看了她们写的比较全面的:

reg=r'</span><a href="((YeJieDongTai|YingYongAnLi|JieJueFangAn|Hadoop|HBase|QiTa|JiShuBoKe)/\d{4,5}\.html)"(.*?)>(.*?)</a>'

3、将链接和标题一块爬取的时候,开始写了两个正则的函数,就是想将两个爬虫合一块,然而这样要不出不来,要么链接和标题是分开的,看了她们的代码发现她们用了一个语法:

re.finditer()

然后在输出时是这样写的:
fd.write(item.group(1)+'\t'+item.group(3)+'\n')
总的来说还是自己掌握的只是不够多。
下面是爬取的代码:
#conding-utf8
import re
import urllib
url='http://www.thebigdata.cn/'

def getHtml(url):
    page=urllib.urlopen(url)
    html=page.read()
    return html
def getDSJ(html):
    reg=r'</span><a href="([A-Z].*?\.html)"(.*?)>(.*?)</a>'
    lsre=re.compile(reg)
    ls=re.finditer(lsre,html)
    return ls

html=getHtml(url)
ls=getDSJ(html)

fd=open(r'theBigDate2.txt','a+')
for item in ls:
    fd.write(item.group(1)+'\t'+item.group(3)+'\n')
fd.close()
爬取的部分内容:






0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12546次
    • 积分:294
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:0篇
    • 译文:0篇
    • 评论:12条
    文章分类
    最新评论