php 抓取网页源码(南阳理工学院ACM题目信息获取源码我们知道浏览器查看网页时 )

优采云 发布时间: 2022-02-08 14:10

  php 抓取网页源码(南阳理工学院ACM题目信息获取源码我们知道浏览器查看网页时

)

  南洋理工ACM专题信息

  

  获取源代码

  我们知道,浏览器在浏览网页时,首先会向服务器发送一个request请求,服务器会根据request请求做一些处理,生成一个response响应返回给浏览器,这个response收录我们需要的网页(或者数据,一般是静态的网站或者服务器端渲染就是直接返回网页),那么我们只需要模仿浏览器发送这个请求给服务器下载网页,而然后等待服务器发回响应。

  1.引入第三方库

  import requests

from bs4 import BeautifulSoup

import csv

from tqdm import tqdm

  2.模拟浏览器

  Headers = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'

  3. 爬网

   r = requests.get(

f'http://www.51mxd.cn/problemset.php-page={pages}.htm', Headers)

r.raise_for_status()

r.encoding = 'utf-8'

  BeautifulSoup 网络分析

  学习了request,了解了伪装技巧,终于可以爬到一些正常的web源码(html文档)了,但这离最后也是最重要的一步——筛选还差得很远。这个过程就像在沙子里淘金一样。没有合适的筛子,你就会错过有价值的东西,或者做无用的工作来筛掉无用的东西。

  淘金者观察土壤并制作筛子。对应爬虫字段就是观察html,自定义过滤器。这里其实是一个简单的抓取 td 标签

  

  1.初始化

   soup = BeautifulSoup(r.text, 'html.parser')

  2.抓取节点

   td = soup.find_all('td')

subject = []

for t in td:

if t.string is not None:

subject.append(t.string)

if len(subject) == 5:

subjects.append(subject)

subject = []

  保存文件

  with open('NYOJ_Subjects.csv', 'w', newline='') as file:

fileWriter = csv.writer(file)

fileWriter.writerow(csvHeaders)

fileWriter.writerows(subjects)

  完整的源代码

  URL链接中.htm前面的数字是相关的,所以可以通过循环爬取多页代码,找到爬取数据的位置,编写代码

  import requests

from bs4 import BeautifulSoup

import csv

from tqdm import tqdm

Headers = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'

csvHeaders = ['题号', '难度', '标题', '通过率', '通过数/总提交数']

subjects = []

for pages in tqdm(range(1, 11 + 1)):

r = requests.get(

f'http://www.51mxd.cn/problemset.php-page={pages}.htm', Headers)

r.raise_for_status()

r.encoding = 'utf-8'

soup = BeautifulSoup(r.text, 'html.parser')

td = soup.find_all('td')

subject = []

for t in td:

if t.string is not None:

subject.append(t.string)

if len(subject) == 5:

subjects.append(subject)

subject = []

with open('NYOJ_Subjects.csv', 'w', newline='') as file:

fileWriter = csv.writer(file)

fileWriter.writerow(csvHeaders)

fileWriter.writerows(subjects)

  运行结果:

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线