python小白学习记录 电影天堂多页爬取实例



from lxml import etree
import requests
#一般访问网页需要有request请求 请求有请求头 只需要模仿请求头 就能访问到网页内容

baseurl0 = "https://www.ygdy8.net"
headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36"
}

#headers是请求头 user-agent是请求头中判断是不是爬虫的其中一项 从f12 抄下来即可
def get_page():
    for x in range(1,4):
        pageurl = "https://www.ygdy8.net/html/gndy/dyzz/list_23_{}.html"
        pageurl = pageurl.format(x)
        get_urls(pageurl)

#get_page 函数是获取每一页的网址 并返回  因为网站一般有很多页 但网址只有微小的差别 如上就只是list_23_的后面数字代表页数
#我从1循环到了3 就是拿了三页的网址

def get_urls(baseurl):
    resp = requests.get(baseurl, headers=headers) #requests .get就是get请求 .post就是post请求 然后把请求头传进取 这个传参方式跟swift有点像
    #上面这一句的返回值就是response 也就是响应 向网址发送请求后就会得到响应
    result = resp.text #这个就是获取响应的内容 也就是你访问的页面的html源代码
    html = etree.HTML(result) #这个是将响应的内容 用了eterr的html的方式进行解析
    uls = html.xpath("//table[@class='tbspan']//a[@href]/@href") # // 代表从所有源代码中找table 且他的class被指定了  /表示上一层html结构找标签  最后的@href就是拿到href的值
    #此处就获取了特定的ul标签并且是一个列表
    uls = map(lambda url:baseurl0+url,uls)  #这个就是 前半段lambda url:baseurl0+url意思就是把uls列表中的一项拿出来通过url传进去 把前面的http://...什么的根目录加上去
    for ul in uls:
        print(ul)#拿到网站一页中的其中一个电影的超链接 再访问此连接的详情页 传到下一个函数里解析
        get_detalis_urls(ul)
#get_urls 这个函数就是从拿来的其中一页的网址来进行访问

def get_detalis_urls(url):
    resp = requests.get(url, headers=headers)
    result = resp.content.decode('gbk')
    html = etree.HTML(result)
    uls = html.xpath("//div/h1/font[@color]/text()")
    print(uls)
    uls2 = html.xpath("//img[@src]/@src")[0]
    print(uls2)
    print("---------------------------------------")
#此函数跟上面那个函数差不多 你可以从电影的详情页里通过xpath语法拿到你想要的html的某一个标签里的内容
get_page()

 

 以上为网页爬取步骤

1,爬取首页各个分页 此处爬取了1-4页

2,解析爬到的各个分页各个电影超链接标签的href值

3,接着通过爬取到的超链接爬取各个电影的详情页

4,解析电影详情页获取所需信息,并保存

 

此处文本解析常用方法

if text.startswith("某段内容开头"):

  ...........

用此方法可以在你获取到一个文本,列表时准确拿到想要的文本

text.strip()

用此方法可以去除文本前后的空格

posted @ 2020-02-10 19:10  jswf  阅读(463)  评论(0)    收藏  举报