PHP中get_headers和file_get_contents关于下载远程报错问题

当使用get_headers获取请求头时,如果报PHP warning:XXX,可以添加以下代码:

$context = stream_context_create(
      array(
          "http" => array(
              "header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
          )
      )
  );

如果需要访问SSL时,请添加

stream_context_set_default( [
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
    ],]);

而且file_get_contents函数要使用:

file_get_contents($img_url , false , $context);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
请为下面代码写详细注释import random import urllib.request from bs4 import BeautifulSoup import codecs from time import sleep def main(url, headers): # 发送请求 page = urllib.request.Request(url, headers=headers) page = urllib.request.urlopen(page) contents = page.read() # 用BeautifulSoup解析网页 soup = BeautifulSoup(contents, "html.parser") infofile.write("") print('爬取豆瓣电影250: \n') for tag in soup.find_all(attrs={"class": "item"}): # 爬取序号 num = tag.find('em').get_text() print(num) infofile.write(num + "\r\n") # 电影名称 name = tag.find_all(attrs={"class": "title"}) zwname = name[0].get_text() print('[文名称]', zwname) infofile.write("[文名称]" + zwname + "\r\n") # 网页链接 url_movie = tag.find(attrs={"class": "hd"}).a urls = url_movie.attrs['href'] print('[网页链接]', urls) infofile.write("[网页链接]" + urls + "\r\n") # 爬取评分和评论数 info = tag.find(attrs={"class": "star"}).get_text() info = info.replace('\n', ' ') info = info.lstrip() print('[评分评论]', info) # 获取评语 info = tag.find(attrs={"class": "inq"}) if (info): # 避免没有影评调用get_text()报错 content = info.get_text() print('[影评]', content) infofile.write(u"[影评]" + content + "\r\n") print('') if __name__ == '__main__': # 存储文件 infofile = codecs.open("03-movie-bs4.txt", 'a', 'utf-8') # 消息头 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'} # 翻页 i = 0 while i < 10: print('页码', (i + 1)) num = i * 25 # 每次显示25部 URL序号按25增加 url = 'https://movie.douban.com/top250?start=' + str(num) + '&filter=' main(url, headers) sleep(5 + random.random()) infofile.write("\r\n\r\n") i = i + 1 infofile.close()
最新发布
06-03
这段代码的作用是爬取豆瓣电影 Top250 的信息并存储到文本文件。下面是对代码的详细注释: ```python # 导入需要的库 import random # 用于生成随机数 import urllib.request # 用于发送请求 from bs4 import BeautifulSoup # 用于解析网页 import codecs # 用于处理文件编码 from time import sleep # 用于暂停程序执行 def main(url, headers): # 发送请求 page = urllib.request.Request(url, headers=headers) page = urllib.request.urlopen(page) contents = page.read() # 用BeautifulSoup解析网页 soup = BeautifulSoup(contents, "html.parser") # 打开文件,将豆瓣电影 Top250 的信息存储到文件 infofile.write("") print('爬取豆瓣电影250: \n') # 遍历每个电影标签 for tag in soup.find_all(attrs={"class": "item"}): # 爬取序号 num = tag.find('em').get_text() print(num) infofile.write(num + "\r\n") # 爬取电影名称 name = tag.find_all(attrs={"class": "title"}) zwname = name[0].get_text() print('[文名称]', zwname) infofile.write("[文名称]" + zwname + "\r\n") # 爬取电影网页链接 url_movie = tag.find(attrs={"class": "hd"}).a urls = url_movie.attrs['href'] print('[网页链接]', urls) infofile.write("[网页链接]" + urls + "\r\n") # 爬取评分和评论数 info = tag.find(attrs={"class": "star"}).get_text() info = info.replace('\n', ' ') info = info.lstrip() print('[评分评论]', info) # 获取影评 info = tag.find(attrs={"class": "inq"}) if (info): # 避免没有影评调用get_text()报错 content = info.get_text() print('[影评]', content) infofile.write(u"[影评]" + content + "\r\n") print('') if __name__ == '__main__': # 存储文件 infofile = codecs.open("03-movie-bs4.txt", 'a', 'utf-8') # 消息头 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'} # 翻页 i = 0 while i < 10: print('页码', (i + 1)) num = i * 25 # 每次显示25部 URL序号按25增加 url = 'https://movie.douban.com/top250?start=' + str(num) + '&filter=' main(url, headers) sleep(5 + random.random()) # 暂停程序执行,避免被封IP infofile.write("\r\n\r\n") i = i + 1 infofile.close() # 关闭文件 ``` 这段代码的执行过程如下: 1. 导入需要的库 2. 定义 `main()` 函数,接受两个参数 `url` 和 `headers` 3. 发送请求,获取网页内容 4. 用 `BeautifulSoup` 解析网页 5. 遍历每个电影标签,爬取电影的序号、名称、网页链接、评分、评论和影评 6. 将爬取的电影信息存储到文件 7. 定义 `__name__` 为 `__main__` 的程序块,用于执行主程序 8. 打开文件,爬取豆瓣电影 Top250 的信息并存储到文件 9. 翻页,重复执行步骤 3-8,直到爬取完所有电影信息 10. 关闭文件 注意:程序使用了 `sleep` 函数暂停程序执行,避免被豆瓣封IP。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值