爬虫实战之中工校网新闻

以下的小程序是爬取中工校网标题:

首先,通过分析中工校网新闻的URL发现,http://www.zzti.edu.cn/info/1041/19593.htm最后的19593控制这页数。然后,构建URL,获取想要的新闻信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import urllib.request
import urllib.error
import re
import time
while True:
page = input('请输入要寻找的新闻页数(小于19596)输入‘q’退出:')
if page == 'q':
break
url = 'http://www.zzti.edu.cn/info/1041/' + str(page) + '.htm'
try:
req = urllib.request.urlopen(url)
html = req.read().decode('utf-8')
pattern = re.compile('<td class="titles.*?>(.*?)</td>.*?<div id="vsb_content_500">(.*?)</div>.*?</div>.*?</td>', re.S)
items = re.findall(pattern, html)
for item in items:
print (item[0], item[1])
except urllib.error.URLError as e:
if hasattr(e, 'code'):
print(e.code)
if hasattr(e, 'reason'):
print(e.reason)
time.sleep(1)

items = re.findall(pattern, html) == items = pattern.findall(html)

正则表达式中,“.”的作用是匹配除“\n”以外的任何字符,也就是说,它是在一行中进行匹配。这里的“行”是以“\n”进行区分的。a字符串有每行的末尾有一个“\n”,不过它不可见。

如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始,不会跨行。而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,将“\n”当做一个普通的字符加入到这个字符串中,在整体中进行匹配。

文章目录