网络爬虫

爬取有规则的数据结构,主要运用的是requests库,想学scrapy来爬。
下一个目标是爬取教务系统的成绩。

学习的来源

一些项目的源代码
教务系统爬取成绩
scrapy官方文档

正则表达式

一些需要注意的小示例:
re模块的官方文档

贪婪模式下的匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if __name__ == '__main__':
str = '<a> b <c>'
pattern = re.compile('<.*>', re.S)
items = re.findall(pattern, str)
print(items)
#结果是<a> b <c>,会尽可能的匹配长的结果
```
### 非贪婪模式下的匹配
``` python
if __name__ == '__main__':
str = '<a> b <c>'
pattern = re.compile('<.*?>', re.S)
items = re.findall(pattern, str)
print(items)
#结果是的<a>

爬取最简单的网页信息

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import requests
import re
from requests.exceptions import RequestException
import json
def get_page(url):
response = requests.get(url)
try:
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
def parse_page(html):
pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?<p class="name">.*?'
'data-val=.*?>(.*?)</a></p>.*?class="star">(.*?)</p>', re.S)
items = re.findall(pattern, html)
for item in items:
yield {
"rank": item[0],
"name": item[1].strip(),
"star": item[2].strip()[3:]
}
def main(offset):
url = 'http://maoyan.com/board/4?offset='+str(offset)
html = get_page(url)
if html == None:
print('haha\n')
for item in parse_page(html):
print(item)
write_to_file(item)
def write_to_file(content):
with open('result.txt', 'a', encoding='utf-8') as f:
f.write(json.dumps(content, ensure_ascii=False)+'\n')
f.close()
if __name__ == "__main__":
for i in range(10):
main(i*10)

未解决的问题

文章目录
  1. 1. 学习的来源
  2. 2. 正则表达式
    1. 2.0.1. 贪婪模式下的匹配
  • 3. 爬取最简单的网页信息
  • 4. 未解决的问题
  • {{ live2d() }}