5.web开发基础

网页组成三部分:结构+表现+行为
html:结构
css:将结构和表现进行分离
js:网页的行为
1** 信息相应
2** 成功定位
3** 重定向
4** 客户端响应
5** 服务端响应
重要内容:
User-Agent
cookie
标准库:urllib 麻烦
第三方库:request

import requests
#在同一个session实例发出的所有请求之间保持cookie
s=requests.Session()
s.get("发出请求页面")
r=s.get("跳转的页面的url")
print(r.text)

#会话可以使用上下文管理器
with requests.Session() as s:
    s.get('跳转的页面url')
#加入了翻页功能
import requests
#引入path功能
from lxml import etree
#控制请求频率
from time import sleep

def get_url_name(myurl):
    ua= "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"
    header = {"user-agent":ua}
    response = requests.get(myurl,headers=header)
    selector= etree.HTML(response.text)
    file_name=selector.xpath('//div[@class="hd"]/a/span[1]/text()')
    file_link = selector.xpath('//div[@class="hd"]/a/@href')
    #遍历对应关系字典
    film_info= dict(zip(file_name,file_link))
    for i in film_info:
        print(f"电影名称:{i} \t\t 电影链接:{film_info[i]}\n")


if __name__ == '__main__':
    urls=tuple(f"https://movie.******.com/top250?start={page*25}&filter=" for page in range(10) )
    for page in urls:
        get_url_name(page)
        sleep(5)
自顶向下设计

从整体分析一个比较复杂的大问题
分析方法可以重用
拆分到你能解决的范畴

scrapy
主要内容摘自此链接
在这里插入图片描述
在这里插入图片https://www.lagou.com/lgeduarticle/81976.html描述

1.引擎(Scrapy)
用来处理整个系统的数据流处理, 触发事务(框架核心)

2.调度器(Scheduler)
用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址

3.下载器(Downloader)
用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)

4.爬虫(Spiders)
爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面

5.项目管道(Pipeline)
负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

6.下载器中间件(Downloader Middlewares)
位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。

7.爬虫中间件(Spider Middlewares)
介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。

8.调度中间件(Scheduler Middewares)
介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

#回答只能爬下两个,注释是一开始以为能爬下来好几个的样式
 #anchor = selector.xpath(f'//div[@data-za-index="{i}"]//a[@class="UserLink-link"]/text()')
    print(anchor)
import requests
from lxml import etree
from time import sleep
from pathlib import *
from queue import Queue
import json

def get_url_answer(myurl):
    anchor = selector.xpath('//a[@class="UserLink-link"]/text()')
    print(anchor)
    content = selector.xpath('//span[@class="RichText ztext CopyrightRichText-richText"]/p/text()')
    print(content)
    answer = dict(zip(anchor,content))
    return answer

if __name__ == '__main__':
    textqueue = Queue(20)
    usr = "https://www.zhihu.com/question/440183834"
    ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"
    header = {"user-agent": ua}
    response = requests.get(usr, headers=header)
    selector = etree.HTML(response.text)

    p = Path(__file__)
    pyfile = p.resolve().parent
    content_path = pyfile.joinpath("content.txt")
    with open(content_path,"w",encoding="utf-8") as f:
        f.write(json.dumps(get_url_answer(usr),ensure_ascii=False))
        #False是因为dumps操作时自动转换为unicode编码,需要取消
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值