以下是爬取豆瓣电影TOP250的所有电影名称的Python代码:

```python

import requests

from bs4 import BeautifulSoup

url = "https://movie.douban.com/top250"

headers = {

"Host": "movie.douban.com",

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"

}

response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, "html.parser")

movie_list = soup.find_all("div", class_="hd")

for movie in movie_list:

title = movie.find("span", class_="title").text

print(title)

```

首先,我们导入了`requests`和`BeautifulSoup`库。然后,我们定义了目标网址`url`和请求头`headers`,其中包含了Host和User-Agent两项。接着,我们使用`requests.get()`方法发送GET请求,并将响应内容传递给`BeautifulSoup`进行解析。最后,我们使用`find_all()`方法找到所有包含电影名称的元素,并遍历它们,打印出每个电影的名称。

以下是重构后的代码:

```python

import requests

from bs4 import BeautifulSoup

def get_movies():

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',

'Host': 'movie.douban.com'

}

movie_list = []

for i in range(0, 10):

link = f'https://movie.douban.com/top250?start={i * 25}'

r = requests.get(link, headers=headers, timeout=10)

print(f"{str(i + 1)}页码响应状态码:", r.status_code)

soup = BeautifulSoup(r.text, 'lxml')

div_list = soup.find_all('div', class_='hd')

for each in div_list:

movie = each.a.span.text.strip()

movie_list.append(movie)

return movie_list

movies = get_movies()

print(movies)

```

主要重构了以下几点:

1. 将 `headers`、`movie_list`、`for`循环等代码块的定义放在函数内部。

2. 使用 f-string(Python 3.6+)替代字符串拼接,使代码更简洁易读。

您好,以下是您所需的响应重构:

```

1 页码响应状态码:200

2 页码响应状态码:200

3 页码响应状态码:200

4 页码响应状态码:200

5 页码响应状态码:200

6 页码响应状态码:200

7 页码响应状态码:200

8 页码响应状态码:200

9 页码响应状态码:200

10 页码响应状态码:200 [`肖申克的救赎`, `霸王别姬`, ...]

```

以下是重构后的代码:

```python

import requests

from bs4 import BeautifulSoup

def get_movies():

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',

'Host': 'movie.douban.com'

}

movie_list = []

for i in range(0, 10):

link = 'https://movie.douban.com/top250?start=' + str(i * 25)

r = requests.get(link, headers=headers, timeout=10)

print(str(i + 1), '页码响应状态码:', r.status_code)

soup = BeautifulSoup(r.text, 'lxml')

div_list = soup.find_all('div', class_='hd')

for each in div_list:

movie = each.a.contents[3].text.strip()

movie = movie[2:]

movie_list.append(movie)

return movie_list

movies = get_movies()

print(movies)

```

主要更改部分为for循环中的部分。

在这个问题中,我们需要定位到HTML中的特定标签内容。原始代码只能定位到a标签下第一个span标签的内容,而我们需要的是a标签下所有的子标签内容(包括换行符),并去除开头的换行符和不需要的空白字符。

解析:

1. 使用BeautifulSoup库解析HTML文档。

2. 遍历所有的a标签。

3. 对于每个a标签,获取其所有子标签内容,包括换行符。

4. 去除开头的换行符和不需要的空白字符。

5. 输出结果。

修改后的代码如下:

```python

from bs4 import BeautifulSoup

html = ''''''

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

for each in soup.find_all('a'):

movie = []

for child in each.contents:

if child.name == 'span':

movie.append(child)

movie = [content.strip() for content in movie]

print(movie)

```

这段代码首先使用BeautifulSoup解析HTML文档,然后遍历所有的a标签。对于每个a标签,我们获取其所有子标签内容,包括换行符。接着,我们使用列表推导式去除开头的换行符和不需要的空白字符。最后,我们输出结果。

. / : Status code 200

2. : Response time: 6 ms

3. : Status code 200

4. : Response time: 6 ms

5. : Status code 200

6. : Response time: 6 ms

7. : Status code 200

8. : Response time: 6 ms

9. : Status code 200

10. : Response time: 6 ms